linux - 为什么我有时需要在 sed 中转义 ()

标签 linux sed awk

当我使用 sed 并像这样使用大括号时

sed -re 's/top([0-9]+)//g'
  1. 我为此工作,但我看到有时我需要转义大括号,有时它无需转义就可以工作。这是为什么

  2. 为什么\w 不能与 awk 一起使用

最佳答案

这取决于您使用的 -r 开关:

   -r, --regexp-extended

          use extended regular expressions in the script.

对于 -r,括号表示捕获的组,要匹配文字括号,您必须将它们转义。

没有 -r 反之亦然。

考虑:

$ sed -r 's/foo([0-9]*)/\1/' <<<'foo123'
123
$ sed 's/foo([0-9]*)/\1/' <<<'foo123'
sed: -e expression #1, char 17: invalid reference \1 on `s' command's RHS
$ sed 's/([0-9]*)//' <<<'foo(123)'
foo
$ sed 's/foo\([0-9]*\)/\1/' <<<'foo(123)'
(123)

(在最后一个组中匹配零位数字)

关于linux - 为什么我有时需要在 sed 中转义 (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14829080/

相关文章:

linux - 如何使用 AWK 语句替换每次出现的事件

regex - 仅使用 'sed' 而不使用 'awk' 从记录中选择特定列

php - cURL 命令行登录 (bash)

shell - awk 用它的散列值替换一列

linux - Bash 脚本 - Grep/Awk 输出作为另一个脚本的输入

awk - 计算带有标题的列数据的平均值

linux - 在针对 Ubuntu 的 Linux Alpine 中进行交叉编译

linux - 保护命令行linux程序

mysql - 从双引号的 csv 字段中去除可变数量的逗号

linux|awk|shell脚本修改多个 block 中的同名行