我有一个包含字符串的文件(test.txt),例如:
name1,6.5.8.12,specs1,version1,['66.55.89.12']
name2,19.13.13.159,specs2,version2,['13.13.173.59'; '14.19.232.42']
name3,141.101.196.40,specs3,version3,['11.01.196.0']
1)我想捕获第 2 列和第 5 列中的所有字符串,这些字符串格式为用点分隔的四个数字,每个数字最多可以是 3 位数字。
2) 第 2 列有一个字符串,但第 5 列有无限个字符串,但它们用分号分隔。
我尝试使用此命令来尝试捕获所有第五列字符串(我仍然需要找出如何捕获第 2 列和第 5 列),但是该命令首先不起作用。它产生了空文件:
cat test.txt | cut -d ',' -f5 | grep -P -o '\d{1-3}\.\d{1-3}\.\d{1-3}\.\d{1-3}' > result.txt
如何捕获第二列和第五列 usng 中的特殊格式字符串grep
。其中字符串是由点分隔的四个数字(从 1 到 3 位)。第 2 列只有一个字符串,但第 5 列有无限个字符串但用分号分隔?
编辑: 预期输出:
6.5.8.12
66.55.89.12
19.13.13.159
13.13.173.59
14.19.232.42
141.101.196.40
11.01.196.0
另请注意,我希望结果排序且唯一sort -u
。我在示例中没有重复的字符串,但如果在我的真实文件中找到,我想避免重复。
是否有其他字段可以保存您的模式(样本没有)?如果没有,请尝试
如果您希望它按数字排序,请使用
sort
'-g
选项。对于问题中给出的您自己的解决方案,请尝试
-f2,5
使用这些cut
字段。您避免
awk
在问题中需要一些理由,但无论如何,你去:如果您想要输出 sort+uniq'ed,您可以
| sort -u
在管道末尾添加自己 a ;-)修正了我的例子,但它并不优雅。
基本上,awk 将字段分开,我们使用 sed 去除不需要的字符,然后对输出进行排序。抱歉,此答案中没有 grep。
这是使用的分步解决方案
cut+tr+sort
一、获取必填字段
然后,删除所有不需要的字符
然后,翻译
,
并;
换行,使每个值都在自己的行上,然后对其进行唯一排序