【问题标题】:What is the difference between sed and awk regular expressionsed和awk正则表达式有什么区别
【发布时间】:2013-04-16 16:41:25
【问题描述】:

我有一个 awk 和一个 sed 示例。两者似乎都使用相同的正则表达式,但输出不同。所以模式扩展一定会变得不同。但我无法得到差异。谁能解释一下?

 $ echo "THE BEAR ATE THE FISH" |sed -e 's/[^ ]*(H|F)[^ ]*/<red>&/g'
THE BEAR ATE THE FISH
 $ echo "THE BEAR ATE THE FISH" | awk 'gsub(/[^ ]*(H|F)[^ ]*/,"<red>&")'
<red>THE BEAR ATE <red>THE <red>FISH
 $ sed --version
GNU sed version 4.1.5
 $ awk --version
GNU Awk 3.1.5

【问题讨论】:

  • 似乎在 sed 中,而不是 (H|F)[HF] 确实给出了相同的输出。

标签: regex bash sed awk


【解决方案1】:

您在您的正则表达式中使用了替代|,它是扩展正则表达式类的一部分。区别在于sed (和grep 当你想使用扩展的正则表达式时,你需要通过-r 标志和GNU sed-E 和@ 来明确987654327@:

$ echo "THE BEAR ATE THE FISH" | sed -re 's/[^ ]*(H|F)[^ ]*/<red>&/g'
<red>THE BEAR ATE <red>THE <red>FISH

您也可以转义扩展的正则表达式功能:

$ echo "THE BEAR ATE THE FISH" |sed -e 's/[^ ]*\(H\|F\)[^ ]*/<red>&/g'
<red>THE BEAR ATE <red>THE <red>FISH

更好的是,您可以在这里使用字符类:

$ echo "THE BEAR ATE THE FISH" |sed 's/[^ ]*[HF][^ ]*/<red>&/g'
<red>THE BEAR ATE <red>THE <red>FISH

这三个工具的手册页都有解释正则表达式使用的部分。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2013-11-09
    • 2013-10-07
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多