用设置的字符串替换文件中的固定位置

replace a fixed position in a file with a set string

您好,我想做以下事情:

file= sample.out

将位置 10-15 中的任何文本替换为 "77777",但仅限于以 ABC

开头的行

到目前为止我有:

cat sample.out | sed -r 's/^ABC(.{9})/7777/'

但是行首的 ABC 被删除并且 77777 被插入到文本位置而不是替换该位置的现有字符。

没有例子我就用这个

文件:repl.txt

0000000001111111111222222222233333333333
1234567890123456789012345678901234567890
ABCDEFGH<12345>IJKLMNOPQRSTUVWXYZ======:

使用此命令:

$ sed -e 's/^\(ABC.\{6\}\).\{5\}\(.*\)$/7777/' repl.txt
0000000001111111111222222222233333333333
1234567890123456789012345678901234567890
ABCDEFGH<77777>IJKLMNOPQRSTUVWXYZ======:

请尝试遵循 awk 程序,使用来自@Arnaud 的 post.

的样本
awk -v newVal="77777" '/^ABC/{print substr([=10=],1,9) newVal substr([=10=],16);next} 1' Input_file

解释:简单的解释就是,这里使用awk程序。首先创建一个名为 newValawk 变量,其中包含 77777 值。在主程序中,检查行是否从 ABC 开始,然后打印子字符串(打印当前行中第 10 到第 15 位置以外的所有内容,并在其位置打印新值)。如果不满足条件(即:行不是从 ABC 开始),则简单地打印该行。

这可能对你有用 (GNU sed):

sed '/^ABC/{s/./&\n/14;T;s//\n&/10;s/\n.*\n/77777/}' file

在行首 ABC 上进行模式匹配,用换行符分隔字符 10-14(5 个字符)并用替换字符串替换它们和之间的字符。

N.B。使用的分隔符必须是唯一的(换行符不能是任何模式的一部分 space 因为 sed 使用换行符来定义模式 space)。此外,分隔符必须从大到小插入,因为换行符会打乱从行首开始的计数。


要从特定位置覆盖,请使用:

sed -E '/^ABC/{s/./\n&/10;T;s/$/\n77777/;:a;s/\n.(.*\n)(.)/\n/;ta;s/\n//g}' file

备选方案:

sed -E 's/^(ABC.{6}).{5}/7777/' file