【问题标题】:replacing the `'` char using awk使用 awk 替换 `'` 字符
【发布时间】:2011-09-25 03:16:09
【问题描述】:

我想删除其中包含单个:' 的行。我想为此使用awk。我试过使用:

 awk '{gsub ( "[:\\']","" ) ; print $0 }'

 awk '{gsub ( "[:\']","" ) ; print $0 }'

 awk '{gsub ( "[:']","" ) ; print $0 }'

它们都不起作用,但返回错误Unmatched ".。当我把

 awk '{gsub ( "[:_]","" ) ; print $0 }'

然后它可以工作并删除所有:_ 字符。我怎样才能摆脱' char?

【问题讨论】:

    标签: awk gsub


    【解决方案1】:

    你可以使用:

    1. 单引号的八进制代码:

      [:\47]
      
    2. 双引号内的单引号,但在这种情况下是特殊的 字符会被shell扩展:

      % print a\': | awk "sub(/[:']/, x)"        
      a
      
    3. 使用动态正则表达式,但存在相关的性能影响 这种方法:

      % print a\': | awk -vrx="[:\\\']" 'sub(rx, x)'  
      a
      

    【讨论】:

      【解决方案2】:

      tr 就是为此目的而制作的

      echo test\'\'\'\':::string | tr -d \':
      teststring
      
      $ echo test\'\'\'\':::string | awk '{gsub(/[:\47]*/,"");print $0}'
      teststring
      

      【讨论】:

        【解决方案3】:

        这行得通:

        awk '{gsub( "[:'\'']","" ); print}'
        

        【讨论】:

          【解决方案4】:

          使用 bash,您不能在用单引号括起来的文字中插入单引号。以'"'"' 为例。

          首先' 关闭当前文字,然后"'" 将它与仅包含单引号的文字连接起来,' 重新打开一个字符串文字,这也将被连接起来。

          你想要的是:

          awk '{gsub ( "[:'"'"']","" ) ; print $0; }'
          

          ssapkota 的替代方案也不错 ('\'')。

          【讨论】:

            【解决方案5】:

            我不知道你为什么要限制自己使用 awk,反正你从其他用户那里得到了很多答案。也可以使用 sed 去掉“:'”

            sed 's/:\'//g'
            

            这也将达到您的目的。简单而不复杂。

            【讨论】:

              【解决方案6】:

              这也有效:

              awk '{gsub("\x27",""); print}'

              【讨论】:

              • 我听说十六进制字符在 awk 的各种实现之间往往有很大不同。见here。在某些实现上更好地使用八进制数,例如"\047"
              • 澄清我之前的评论:十六进制字符在某些情况下可能表现不同。例如,print "\x27foo\x27" 可以与 mawk 和 busybox awk 一起使用,但不能与 gawk 一起使用。
              【解决方案7】:

              最简单的 awk '{gsub(/\047|:/,"")};1'

              【讨论】:

                猜你喜欢
                • 2017-02-08
                • 1970-01-01
                • 2011-08-15
                • 1970-01-01
                • 1970-01-01
                • 2015-01-13
                • 2019-08-07
                • 2014-06-20
                • 2012-06-07
                相关资源
                最近更新 更多