用awk替换```char

时间:2011-06-29 12:44:13

标签: awk gsub

我想要删除其中包含一个:'的行。我想用awk来做这件事。我尝试过使用:

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

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

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

其中没有工作,但返回错误Unmatched ".。当我把

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

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

7 个答案:

答案 0 :(得分:11)

tr就是出于此目的

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

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

答案 1 :(得分:9)

这有效:

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

答案 2 :(得分:7)

您可以使用:

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

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

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

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

答案 3 :(得分:6)

使用bash,您无法在包含单引号的文字中插入单引号。例如,使用'"'"'

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

你想要的是:

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

ssapkota的替代方案也很好('\'')。

答案 4 :(得分:3)

我不知道你为什么要限制自己使用awk,无论如何你从其他用户那里得到了很多答案。你也可以使用sed摆脱“:'”

sed 's/:\'//g'

这也符合您的目的。简单而不那么复杂。

答案 5 :(得分:2)

这也有效:

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

答案 6 :(得分:0)

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