[英]Use SED to replace string of fixed length at certain position - arbitrary pattern
尝试将指定位置的固定长度的字符串(任意数字的字符串)替换为指定的字符串。
我必须 :
对于以1
开头的每一行,在4-13
列中,将现有值替换为123456789
,其中第4
列是空格。 123456789
因此,示例文件在第一行中如下所示:
110 000000000000000000000000000000000000000
而且我要
110 123456789000000000000000000000000000000
到目前为止,我有:
sed -i "/^1/ s/(.{10})/ 123456789/4" $DEST/$FILE_NAME$DATE.txt
这什么也没做...
与sed
:
sed '/^1/s/\(.\{4\}\)\(.\{9\}\)/\1123456789/' "$DEST/$FILE_NAME$DATE.txt"
前面的regex /^1/
使得以下替换命令仅适用于以1
开头的行。
replace命令本身将前4个字符100<space>
和随后的9个字符000000000
捕获到单独的组中,同时保留前4个字符并用123456789
替换随后的9个字符。
顺便说一句,如果您具有GNU sed,则可以将命令简化为:
sed -r '/^1/s/(.{4})(.{9})/\1123456789/'
...看起来更易于理解,但不能移植到所有不同的sed版本中。
使用awk
,简单易懂的解决方案
awk '/^1/ {print substr($0,1,4)"123456789"substr($0,14)}' file
110 123456789000000000000000000000000000000
如果行以1
开头,则打印4
个字符+ 123456789
+从14
位置开始的其余行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.