Grep
使用 grep 匹配第 2 列和第 5 列中的字元串的正則表達式
我有一個包含字元串的文件(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 列有一個字元串,但第 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
。我在範例中沒有重複的字元串,但如果在我的真實文件中找到,我想避免重複。
是否有其他欄位可以保存您的模式(樣本沒有)?如果沒有,請嘗試
grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" file | sort -u 11.01.196.0 13.13.173.59 141.101.196.40 14.19.232.42 19.13.13.159 6.5.8.12 66.55.89.12
如果您希望它按數字排序,請使用
sort
’-g
選項。對於問題中給出的您自己的解決方案,請嘗試
-f2,5
使用這些cut
欄位。
您避免
awk
在問題中需要一些理由,但無論如何,你去:$ cut -d, -f2,5 file | egrep -wo '([0-9]{1,3}[.]){3}[0-9]{1,3}' 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+uniq’ed,您可以
| sort -u
在管道末尾添加自己 a ;-)