尝试用指定的字符串替换特定位置(一串任意数字的字符串)的固定长度字符串。
我必须:
对于以1
列开头的每一行,在4-13
列中,将现有值替换为123456789
,其中列4
为空格。 123456789
所以示例文件在第一行中如下所示:
110 000000000000000000000000000000000000000
我想要
110 123456789000000000000000000000000000000
到目前为止,我有:
sed -i "/^1/ s/(.{10})/ 123456789/4" $DEST/$FILE_NAME$DATE.txt
这虽然没有做任何事......
答案 0 :(得分:2)
使用sed
:
sed '/^1/s/\(.\{4\}\)\(.\{9\}\)/\1123456789/' "$DEST/$FILE_NAME$DATE.txt"
前面的正则表达式/^1/
使以下替换命令仅适用于以1
开头的行。
替换命令本身将前4个字符100<space>
和后面的9个字符000000000
捕获到不同的组中,同时保留前4个字符并用123456789
替换以下9个字符。< / p>
顺便说一下,如果你有GNU sed,你可以简化命令:
sed -r '/^1/s/(.{4})(.{9})/\1123456789/'
...看起来更容易理解,但不能在所有不同的sed版本中移植。
答案 1 :(得分:0)
使用awk
,简单易懂的解决方案
awk '/^1/ {print substr($0,1,4)"123456789"substr($0,14)}' file
110 123456789000000000000000000000000000000
如果行以1
开头,请打印4
首字符+ 123456789
+从14
位置开始的其余行。