替换 Bash 中的垂直线

Substitute vertical lines in Bash

我很难完成我的脚本,因为这部分没有按照我想要的方式运行。

我的脚本中有这一行:

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

根本不起作用。 我想将所有竖线更改为新线,但我无法实现。请帮我解决一下这个。谢谢

您可以像这样在一个 awk 中完成所有替换:

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

管道用于需要转义的正则表达式转换。但是字符 class [...] 内的竖线或星号不需要如上所示转义。

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

如果您真的只想用换行符替换竖线,您可以使用 tr 更简洁地做到这一点,其中 翻译 个字符:

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

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

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