Jim*_*Jim 2 linux sed regular-expression
我对 sed 感到困惑。
我有一个包含以下内容的文件:
[ 2014/02/10 14:45:15 | INFO ] Saving data for customer: 273667
[ 2014/02/10 14:45:15 | INFO ] Saving data for customer: 273687
[ 2014/02/10 14:45:15 | INFO ] Saving data for customer: 272667
[ 2014/02/10 14:45:15 | INFO ] Saving data for customer: 373667
[ 2014/02/10 14:45:15 | INFO ] Saving data for customer: 573667
[ 2014/02/10 14:45:15 | INFO ] Saving data for customer: 263667
Run Code Online (Sandbox Code Playgroud)
我想删除除客户 ID 之外的所有内容。所以我运行以下命令:
$ sed 's/^.*:\s\(\[0-9\]\{6\}\)/\1/g' customers.txt > customers2.txt
Run Code Online (Sandbox Code Playgroud)
这绝对没有任何作用。
在考虑之后(以及很多挫折)我试图从[]. 所以我运行以下命令:
$ sed 's/^.*:\s\([0-9]\{6\}\)/\1/g' customers.txt > customers2.txt
Run Code Online (Sandbox Code Playgroud)
这奏效了。
但现在我无法真正理解 sed 的工作原理。为什么我需要转义(分组和{范围而不是[字符类?
基本上,因为[ ]是基本正则表达式语法的一部分,而捕获组{}则不是。转义[]意味着您要匹配文字括号,而不是类。
顺便说一句,如果您想要打印文件中的最后一个字段,awk则要容易得多:
awk '{print $NF}' customers.txt > customers2.txt
Run Code Online (Sandbox Code Playgroud)
在您的特定情况下,您还可以使用cut:
cut -d':' -f 4 customers.txt > customers2.txt
Run Code Online (Sandbox Code Playgroud)
你可以随时使用 Perl:
perl -pe 's/.*:\s*//' customers.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
745 次 |
| 最近记录: |