繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM