我想要删除其中包含一个:
和'
的行。我想用awk
来做这件事。我尝试过使用:
awk '{gsub ( "[:\\']","" ) ; print $0 }'
和
awk '{gsub ( "[:\']","" ) ; print $0 }'
和
awk '{gsub ( "[:']","" ) ; print $0 }'
其中没有工作,但返回错误Unmatched ".
。当我把
awk '{gsub ( "[:_]","" ) ; print $0 }'
然后它可以工作并移除所有:
和_
个字符。我怎样才能摆脱'
char?
答案 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)
您可以使用:
单引号的八进制代码:
[:\47]
双引号内的单引号,但在这种情况下是特殊的 shell将扩展字符:
% print a\': | awk "sub(/[:']/, x)"
a
使用动态正则表达式,但有相关的性能影响 采用这种方法:
% 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'