我的文件包含如下所示的数据:
{ "any1", "aaa.bbb.ccc.1.ddd", "var1" }
{ "any2", "aaa.bbb.ccc.1.eee", "toto" }
{ "an42", "aaa.bbb.ccc.1.fff", "titi" }
{ "an47", "aaa.bbb.ccc.2.eee", "var3" }
{ "any7", "aaa.bbb.ccc.2.ddd", "var12" }
{ "a789", "aaa.bbb.ccc.2.fff", "var14" }
{ "any1", "xxx.yyy.zzz.1.ddd", "var1" }
{ "any2", "xxx.yyy.zzz.1.eee", "toto" }
{ "an42", "xxx.yyy.zzz.1.fff", "titi" }
我想提取前缀“aaa.bbb.ccc”的所有索引
所以命令应该返回
linux# command
1
2
如何使用 sed
、awk
、grep
、sort
实现这一点?
最佳答案
例如,您可以说:
$ grep -Po '(?<=aaa\.bbb\.ccc\.)\d*' file | sort -u
1
2
一步一步
获取aaa\.bbb\.ccc\.
之后的数字(请注意,我们对点进行转义以匹配点本身,而不是任何字符):
$ grep -Po '(?<=aaa\.bbb\.ccc\.)\d*' file
1
1
1
2
2
2
对它们进行排序
并找到唯一值:
$ grep -Po '(?<=aaa\.bbb\.ccc\.)\d*' file | sort -u
1
2
<小时/>
替代 sed
如果您的 grep
中没有 -P
选项,则可以使用 sed
:
$ sed -nr 's/^.*aaa\.bbb\.ccc\.([0-9]+).*$/\1/p' file
1
1
1
2
2
2
$ sed -nr 's/^.*aaa\.bbb\.ccc\.([0-9]+).*$/\1/p' file | sort -u
1
2
关于linux - 如何从字符串中提取索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29963663/