0

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

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

4 回答 4

3
awk 'BEGIN{FS=OFS="|"}/^B/{$3="QQQ"}1'

如果您想在第三列中添加文本(如果有的话)而不是破坏它,

awk 'BEGIN{FS=OFS="|"}/^B/{$3="QQQ"$3}1'

要改为追加,请将 移动$3到另一侧。

于 2013-10-31T21:08:46.697 回答
3

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

sed '/^B/s/[^|]*/QQQ/3' file
于 2013-11-01T08:31:19.683 回答
1

这假定每条记录中没有前导空格。它还替换了第 3 列的现有内容

awk -F'|' -v OFS='|' '$1 ~ /^B/{$3="QQQ"};{print}' input.txt
于 2013-10-31T21:06:39.970 回答
1
awk -F'|' -v OFS="|" '/^B/{$3="QQQ"}7' file
于 2013-10-31T21:08:26.677 回答