linux - 如何从字符串中提取索引?

标签 linux shell awk sed ash

我的文件包含如下所示的数据:

{ "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

如何使用 sedawkgrepsort 实现这一点?

最佳答案

例如,您可以说:

$ 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/

相关文章:

linux - 缺少 Jenkins 环境变量

linux - 典型的 Linux 内核启动的第一个进程是什么?

java - Linux 和 Windows java 编译器生成相同还是不同的类文件?

java - 如何处理通过 Scala/Java ProcessBuilder 发送的 SSH 命令上的空格?

java - 如何用空格分割 $(MAKECMDGOALS)

linux - 将每 x(dynamic) 行移动到一行 [Shell]

linux - 如何使用 awk 显示文本文件中的某些特定字段?

linux - 显示每个没有名称的文件的前 5 行

php - 脚本调用后 Bash 不继续?

linux - 为什么 setsid 无法退出 shell 脚本?