我必须处理一个包含这样组织的数据的文件
AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
etc
列的长度可以不同,但行的列数始终相同。
我希望能够剪切给定行的特定列并将其更改为我想要的值。
例如,我将应用我的命令并将文件更改为
AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
我知道如何使用 sed 选择特定行,然后剪切该字段,但我不知道如何用我拥有的值替换该字段。
谢谢
最佳答案
下面是使用 awk
的方法:
继续你的例子,如果你想替换第一行的第三个字段:
awk 'BEGIN{FS=OFS=":"} {if (NR==1) {$3 = "XXXX"}; print}' input_file
输入:
AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
输出:
AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
解释:
awk
: 调用awk命令'...'
:单引号内的所有内容都是 awk 的指令BEGIN{FS=OFS=":"}
:使用:
作为输入和输出的分隔符。FS
代表字段分隔符。OFS
代表输出字段分隔符。if (NR==1) {$3 = "XXXX"};
:如果目前读取的记录数(NR
)为1,则设置第3个字段 ($3
) 到“XXXX
”。print
: 打印当前行input_file
:输入文件的名称。
如果您想要完成的只是将文件中所有出现的 CCC
替换为 XXXX
,只需执行以下操作:
sed -i 's/CCC/XXXX/g` input_file
请注意,这也会替换部分匹配项,例如 ABCCDD
-> ABXXXXDD
关于bash - 剪切并替换 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588949/