使用SED替换特定位置的固定长度的字符串 - 任意模式

时间:2014-07-01 20:08:29

标签: regex awk sed

尝试用指定的字符串替换特定位置(一串任意数字的字符串)的固定长度字符串。

我必须:
对于以1列开头的每一行,在4-13列中,将现有值替换为123456789,其中列4为空格。 123456789

所以示例文件在第一行中如下所示:

110 000000000000000000000000000000000000000

我想要

110 123456789000000000000000000000000000000

到目前为止,我有:

sed -i "/^1/ s/(.{10})/ 123456789/4" $DEST/$FILE_NAME$DATE.txt

这虽然没有做任何事......

2 个答案:

答案 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位置开始的其余行。