我想获取 B* 之后的数字,但不包括是和之后。我尝试使用从朋友那里得到的这个命令,但它不起作用:
grep -oP 'B.\K[\w\s\d]' < tus.txt | sort -u
tus.txt
~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758895*4932764*B*4578873831221*Y*
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21759295*4932379*B*00082403*Y*2708332
期望的结果:
222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403
答案1
输入以*
- 分隔。获取第五个字段:
$ cut -d '*' -f 5 tus.txt
222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403
这是您提到的所需输出,但您还讨论了对其进行排序:
$ cut -d '*' -f 5 tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
262105589241-20172-31489016
36
4578873831221
如果您出于某种原因想要对原来的该字段的数据(此处不删除重复项):
$ sort -t '*' -k5,5 tus.txt
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21759295*4932379*B*00082403*Y*2708332
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758895*4932764*B*4578873831221*Y*
答案2
你的命令也有效,你需要添加一个*
或+
:
$ grep -oP 'B.\K[\w\s\d]+' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221
或者,更简单地说:
$ grep -oP 'B\*\K[^*]*' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221
或者,用于awk
打印倒数第二个*
分隔字段:
$ awk -F'[*]' '{print $5}' tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241
36
4578873831221
答案3
使用以下方法:
grep -Po '(?<=\*B\*)[^*]+' tus.txt | sort -u
输出:
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241-20172-31489016
36
4578873831221
注意,sort -u
将重新排序初始grep
输出