目前我正在自学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
末尾的 ,这在您的示例中是不需要的。
有关的: