如果行以X开头,则sed替换第n列中的数据

时间:2013-10-31 21:01:43

标签: replace sed awk

我有一个看起来像这样的文件:

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单线型建议都会很棒。

4 个答案:

答案 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