使用 awk 替换 `'` 字符

发布于 2024-11-17 14:25:48 字数 491 浏览 4 评论 0原文

我想删除其中包含单个 :' 的行。我想使用 awk 来实现此目的。我尝试过使用:

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

并且

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

它们

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

都不起作用,但返回错误Unmatched“。。当我放置

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

然后它起作用并删除所有_ 字符。如何去掉 ' 字符?

I have lines with a single : and a' in them that I want to get rid of. I want to use awk for this. I've tried using:

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

and

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

and

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

non of them worked, but return the error Unmatched ".. when I put

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

then It works and removes all : and _ chars. How can I get rid of the ' char?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

长途伴 2024-11-24 14:25:48

tr 就是为此目的而制作的

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

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

tr is made for this purpose

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

$ echo test\'\'\'\':::string | awk '{gsub(/[:\47]*/,"");print $0}'
teststring
愚人国度 2024-11-24 14:25:48

这有效:

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

This works:

awk '{gsub( "[:'\'']","" ); print}'
浅笑轻吟梦一曲 2024-11-24 14:25:48

您可以使用:

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

    <前><代码>[:\47]

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

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

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

You could use:

  1. Octal code for the single quote:

    [:\47]
    
  2. The single quote inside double quotes, but in that case special
    characters will be expanded by the shell:

    % print a\': | awk "sub(/[:']/, x)"        
    a
    
  3. Use a dynamic regexp, but there are performance implications related
    to this approach:

    % print a\': | awk -vrx="[:\\\']" 'sub(rx, x)'  
    a
    
谜兔 2024-11-24 14:25:48

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

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

你想要的是:

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

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

With bash you cannot insert a single quote inside a literal surrounded with single quotes. Use '"'"' for example.

First ' closes the current literal, then "'" concatenates it with a literal containing only a single quote, and ' reopens a string literal, which will be also concatenated.

What you want is:

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

ssapkota's alternative is also good ('\'').

∞觅青森が 2024-11-24 14:25:48

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

sed 's/:\'//g'

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

I don't know why you are restricting yourself to using awk, anyways you've got many answers from other users. You can also use sed to get rid of " :' "

sed 's/:\'//g'

This will also serve your purpose. Simple and less complex.

潇烟暮雨 2024-11-24 14:25:48

这也有效:

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

This also works:

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

高速公鹿 2024-11-24 14:25:48

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文