【发布时间】:2016-10-06 16:41:50
【问题描述】:
我想用 sed 或 awk 翻译这个输入文件:
input
1 AA
3 BB
5 CC
output
1 AA
3 BB
3 GG
5 CC
我在此站点 sed -i '/^BB:/ s/$/ GG/' 文件上找到的最接近的语法,但它确实是 3 BB GG。我需要的类似于 vi yank、paste 和 regex 替换。
这可以用 sed 或 awk 完成吗?谢谢
兰德
【问题讨论】:
我想用 sed 或 awk 翻译这个输入文件:
input
1 AA
3 BB
5 CC
output
1 AA
3 BB
3 GG
5 CC
我在此站点 sed -i '/^BB:/ s/$/ GG/' 文件上找到的最接近的语法,但它确实是 3 BB GG。我需要的类似于 vi yank、paste 和 regex 替换。
这可以用 sed 或 awk 完成吗?谢谢
兰德
【问题讨论】:
使用 GNU sed:
sed -r 's/^([^ ]*) BB$/&\n\1 GG/' file
输出:
1 AA 3 BB 3个GG 5 抄送【讨论】:
这可能对你有用(GNU sed):
sed '/BB/p;s//GG/' file
如果该行包含所需的字符串,则打印它,然后用另一个字符串代替它。
【讨论】:
awk 是一个很好的选择:
awk '{print $0} $2=="BB"{print $1,"GG"}' yourfile.txt
这将打印{print $0} 行。然后如果该行中的第二个字段等于“BB”,它将打印该行中的第一个字段(数字)和文本“GG”。
使用示例:
>echo "1 AA\n3 BB\n4 RR" | awk '{print $0} $2=="BB"{print $1,"GG"}'
1 AA
3 BB
3 GG
4 RR
【讨论】:
在 awk 中:
$ awk '1; /BB/ && $2="GG"' input
1 AA
3 BB
3 GG
5 CC
1 打印记录。如果刚刚打印的记录中有BB,则将其替换为GG,然后重新打印。
【讨论】: