我有一个输入文件,并且如果该文件中的任何行都有特定的关键字,我想覆盖特定列位置的数据(例如,我想用xxxxxx
填充第10到15列)。我是Shell脚本的新手。如果我听起来很天真,请原谅。
样本输入:
aaaaa 11 ****** bacxyz more data
bbbbb 11 ****** qweabc more data
ccccc 11 ****** pqrxyz more data
aaaaa 11 ****** jkkxyz more data
预期输出:(如果一行的任何位置有aaaaaa
,请用xxxxxx
覆盖col 10至15,否则按原样写入。)
aaaaa 11 ****** xxxxxx more data
bbbbb 11 ****** qweabc more data
ccccc 11 ****** pqrxyz more data
aaaaa 11 ****** xxxxxx more data
答案 0 :(得分:2)
此sed
可能对您有用:
sed -E '/aaaaa/ s/^(.{16}).{6}(.*)/\1xxxxxx\2/' file
aaaaa 11 ****** xxxxxx more data
bbbbb 11 ****** qweabc more data
ccccc 11 ****** pqrxyz more data
aaaaa 11 ****** xxxxxx more data
在预期输出中它不在10-15位置,而是17-22。
答案 1 :(得分:2)
您可以使用以下Vim命令:
Dialog
这将用:g/aaaaa/s/\%>16c\%<23c./x/g
替换第16列和第23列之间的字符。替换在包含文本x
的行中执行。
答案 2 :(得分:1)
使用awk
通常很容易获得列数据-“如果第一个字段为aaaaa,则将第四个字段设为xxxxx;然后打印该行,不管它是什么”:
awk '$1=="aaaaa"{$4="xxxxx"}{print}' filename
答案 3 :(得分:0)
另一个全局命令
:g/^a/norm 3wvt rx