计算文本文件中模式的所有唯一实例

问题描述 投票:0回答:1

我有一个包含多行文本的文件,所有文本均以六个十六进制数字开头,一个空格,然后是一些文本。有时,此残留文本以字符

X
Y
开头,后跟 4 位数字和冒号。示例:

72a0bf Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
703e80 X-2310: Duis nibh sem, sollicitudin vel nulla eu, facilisis pulvinar purus. 
21b6ac Nam ornare blandit consequat. Vivamus tincidunt eros consequat, egestas 
8961cb Y-0110: dui at, lobortis nibh. Sed sed felis vel felis euismod dapibus in vel erat. 
ce5dfe X-2310: Curabitur facilisis felis nec ante euismod ultricies at eget turpis. Duis 
fa5e8b ac dui ut elit volutpat accumsan quis quis justo. Donec luctus suscipit sem,

我的目标是找到这些

X***
Y***
字符串的所有唯一实例。现在,如果我的所有记录都是上述形式,则可以通过例如一些
grep
awk
和其他
bash
工具来实现:

$ cat file.txt | grep -E '^[a-z|0-9]{6}[[:space:]](X|Y)-[0-9]{4}' | awk '{print substr($2, 1, length($2) -1)}' | sort | uniq
X-2310
Y-0110

问题是,在 do 包含此模式的一些记录中,我正在

grep
ping(并且仅),不幸的是,我里面有一些 X***
Y***
 字符串的实例剩余文本,这些实例可以是 1, 2, 3,...任何数字:

c8edc6 X-0101: at tempor tellus commodo sit amet. X-2489 Nunc id gravida est, in rhoncus metus. fa5e8b Y-9410: ac X-1320 X-0101 dui ut elit Y-9416 volutpat accumsan X-0101 quis X-2000 quis justo. e29ac0 Y-5751: Vivamus Y-0110 vehicula Y-2021 dolor X-0101 a pretium.
这给我上面的脚本带来了麻烦,因为我只是在寻找行首附近的模式。我希望能够找到字符串 

X***Y***

 的那些实例的 
all
。有任何想法吗?唯一的限制是,由于环境限制,它必须是一个
bash
解决方案。

bash awk pattern-matching
1个回答
0
投票

$ grep -E --only-matching '(X|Y)-[0-9]{4}' file.txt | sort | uniq


有窍门。

© www.soinside.com 2019 - 2024. All rights reserved.