21

我有一个单行:和一个'我想摆脱的行。我想用awk这个。我试过使用:

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

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

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

他们都没有工作,但返回错误Unmatched ".。当我把

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

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

4

7 回答 7

13

tr是为此目的而制作的

echo test\'\'\'\':::string | tr -d \':
teststring

$ echo test\'\'\'\':::string | awk '{gsub(/[:\47]*/,"");print $0}'
teststring
于 2011-06-29T12:51:38.657 回答
9

你可以使用:

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

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

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

    % print a\': | awk -vrx="[:\\\']" 'sub(rx, x)'  
    a
    
于 2011-06-29T12:49:26.960 回答
9

这有效:

awk '{gsub( "[:'\'']","" ); print}'
于 2011-06-29T12:53:53.213 回答
6

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

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

你想要的是:

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

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

于 2011-06-29T13:34:48.413 回答
4

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

sed 's/:\'//g'

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

于 2012-05-20T17:32:08.667 回答
3

这也有效:

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

于 2013-08-01T21:49:06.380 回答
1

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

于 2017-06-02T00:43:09.017 回答