替换 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
我很难完成我的脚本,因为这部分没有按照我想要的方式运行。
我的脚本中有这一行:
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