在Bash中替换垂直线

时间:2015-09-03 07:04:23

标签: bash awk gsub

我很难完成我的剧本,因为这部分并没有像我希望的那样发挥作用。

我的剧本中有这一行:

cat /home/tmp/temp1.txt | awk '{gsub("~",RS);gsub("*",RS);print}' >  /home/tmp/temp.txt

工作正常,是的。 但是,当我做这样的事情时:

cat /home/tmp/temp1.txt | awk '{gsub("|",RS);print}' >  /home/tmp/temp.txt

根本不工作。 我想把我所有的竖条改成新的线条,但我无法实现它。请帮我解决一下这个。感谢

2 个答案:

答案 0 :(得分:4)

您可以在单个awk中执行所有替换:

awk '{gsub(/[*~|]/, RS)} 1' /home/tmp/temp1.txt

管道另外用于需要转义的正则表达式交替。但是,在字符类[...]管道或星号内部不需要如上所示进行转义。

最好在/.../函数中使用gsub正则表达式文字,而不是引用字符串。

答案 1 :(得分:1)

如果您真的只想用竖线替换竖线,那么您可以使用翻译字符的tr更简洁地执行此操作:

echo "hi|there|my|friend"   |    tr '|' '\n'
hi
there
my
friend

或者,如果您使用的是文件:

tr '|' '\n'  < /home/tmp/temp.txt