【问题标题】:Substitute vertical lines in Bash在 Bash 中替换垂直线
【发布时间】:2015-09-03 07:04:23
【问题描述】:

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

我的脚本中有这一行:

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

它根本不起作用。 我想把我所有的竖线都换成新线,但我无法实现。请帮我解决一下这个。谢谢

【问题讨论】:

    标签: bash awk gsub


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 仅供参考,awk '{gsub("\\|", RS)} 1'awk '{gsub(/\|/, RS)} 1'awk '{gsub(/[|]/, RS)} 1' 仅适用于管道符号。
    • 感谢@anubhava 提供的信息。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多