有没有办法指定我想要附加到我的文件的regexp组?
在下面的示例中,我只想将(\d{8})
存储在我的文件中:
grep -P1 -o kamilla(\d{8}) >> whatever.txt
答案 0 :(得分:4)
您需要使用正面观察断言或替代方案,以使其不包含在匹配中。
积极向后看:
grep -Poi '(?<=kamilla)\d{8}'
后视断言,在字符串中的当前位置,先前的是&#34; kamilla&#34;。如果断言成功,则正则表达式引擎匹配八位数。
替代\K
转义序列:
grep -Poi 'kamilla\K\d{8}'
\K
转义序列会重置报告的匹配的起始点。任何先前匹配的字符都不包含在最终匹配的序列中。
-o
选项仅显示与模式匹配的匹配部分。答案 1 :(得分:3)
您可以使用-o
开关和\K
,它会移除匹配的前一部分:
$ grep -Poi 'kamilla\K\d{8}' <<<"kamilla83222237"
83222237
当您使用Perl风格的正则表达式时,您也可以使用Perl:
$ perl -nE 'say $1 if /kamilla(\d{8})/' <<<"kamilla83222237"
83222237
答案 2 :(得分:0)
另一种方式:
$ grep -P -o '(?<=kamilla)\d{8}' <<< kamilla12345678
12345678
答案 3 :(得分:0)
您可以改为使用sed
:
sed -E "s/.*kamilla(\d{8}).*/\1/g" input.txt >> output.txt
这是用第一个匹配的组\1
替换输入行并打印它。
这也让你操纵输入文件是一些非平凡的方法。例如,您可以匹配两个组并以非默认顺序输出它们,例如\2\1
等等。