我有一些文件。我想从每个文件中匹配以下两行字符串。
<TagA>A7C</TagA>
<!--<TagA>70458548767</TagA>-->
但是,我希望 grep 或 pcregrep 或任何 Linux 实用程序显示:
A7C 767
注意:第二行数字的前 8 位可以视为随机数。就我的目的而言,无论其值是多少,都可以将其删除。此外,第二行有前导空格。
GC_
答案1
分离出您想要的数字:
$ grep -oP '\w{3}(?=</TagA>)' input
A7C
767
在上面的 中,\w{3}
匹配任何三个单词字符,并且(?=</TagA>)
要求该匹配位于 之前</TagA>
。通常,grep 会打印包含匹配项的整行。 -o
告诉 grep 只打印匹配项。 -P
告诉 grep 使用 Perl 语法,这是启用前瞻功能所必需的(?=</TagA>)
。
要将两个数字放在一行上:
$ grep -oP '\w{3}(?=</TagA>)' input | sed 'N;s/\n/ /'
A7C 767
答案2
这是一个适用于任意次数的 Perl 方法:
perl -ane 'print "$& " if m~\w{3}(?=</TagA>)~' file
解释:
print "$& " # print the match with a space after
if m~\w{3}(?=</TagA>)~ # match 3 word characters before end tag </TagA>
示例文件:
blah
<TagA>A7C</TagA>
<!--<TagA>70458548767</TagA>-->
blah blah
<TagB>A7C</TagB>
<!--<TagA>70458548767</TagA>-->
blah blah
<TagA>A7C</TagA>
<!--<TagC>70458548767</TagC>-->
blah blah
输出:
A7C 767 767 A7C