Sed 正则表达式:-E 和 BRE 之间的区别(Sed & Awk 101 hacks)

Sed 正则表达式:-E 和 BRE 之间的区别(Sed & Awk 101 hacks)

目前我正在自学awk和sed。我找到了在线书籍 Sed & Awk 101 hacks,到目前为止我发现它非常好。尽管如此,我发现我已经几天没有继续了,因为我无法理解“分组”的概念这是输入文件

cat employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager

书中的 sed 命令如下:

sed 's/\([^,]*\).*/\1/g' employee.txt

该命令的输出是:

101
102
103
104
105

我试图理解该命令,但它对我来说没有意义。然后,在检查 sed 文档 (man sed) 后,我注意到当不使用标志 -E 时,正则表达式采用 BRE 语法。你能告诉我为什么这个表达式不能得到相同的输入吗?

sed -E 's/^(\d+),.+/\1/g' employee.txt

提前致谢!

答案1

\d在 中不起作用。sed您可以改用[[:digit:]][0-9]

sed -E 's/^([[:digit:]]+),.+/\1/' employee.txt
sed -E 's/^([0-9]+),.+/\1/' employee.txt

请注意,我删除了g末尾的 ,这在您的示例中是不需要的。

有关的:

相关内容