我有一个看起来像这样的文件:
A|\^&|||something|||||somethingelse|||XZXZXZXXZ-C5|2013
B|1||||ccccX|||||||||||||||||HERE||||||||||
C|1|rfrfrfrf||^^^hghghghg|3||||||||||8||||||||||B| |||||
D|1|^^^grpou|word|||||C||adam||2013|0123|
E|1|G
我想将文本QQQ插入以B开头的任意行的第3列。我已经尝试过几个选项并且有一些选项,但我认为我已经在我的诊断中复杂化了。
以下是我希望能提出的结果:
A|\^&|||something|||||somethingelse|||XZXZXZXXZ-C5|2013
B|1|QQQ|||ccccX|||||||||||||||||HERE||||||||||
C|1|rfrfrfrf||^^^hghghghg|3||||||||||8||||||||||B| |||||
D|1|^^^grpou|word|||||C||adam||2013|0123|
E|1|G
任何sed或awk单线型建议都会很棒。
答案 0 :(得分:3)
awk 'BEGIN{FS=OFS="|"}/^B/{$3="QQQ"}1'
如果你想在第三栏中添加文字(如果碰巧有的话),而不是破坏它,
awk 'BEGIN{FS=OFS="|"}/^B/{$3="QQQ"$3}1'
要添加,请将$3
移到另一边。
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed '/^B/s/[^|]*/QQQ/3' file
答案 2 :(得分:1)
这假定每条记录中没有前导空格。它还替换第3列的预先存在的内容
awk -F'|' -v OFS='|' '$1 ~ /^B/{$3="QQQ"};{print}' input.txt
答案 3 :(得分:1)
awk -F'|' -v OFS="|" '/^B/{$3="QQQ"}7' file