Grep

使用 grep 匹配第 2 列和第 5 列中的字元串的正則表達式

  • October 20, 2018

我有一個包含字元串的文件(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 位數字。

  1. 第 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 ;-)

引用自:https://unix.stackexchange.com/questions/476717