Grep 查找匹配模式后的特定数量的字符

Grep 查找匹配模式后的特定数量的字符

我有这个文本文件:

cat1-home-switch-sw131436 DNI AG3448P-R 2.1.1.1
cat1-home-switch-sw101357 DNI AG3448P-R 2.1.1.1
cat1-home-switch-sw253356 DNI AG3448P-R 2.1.1.1
cat1-home-switch-sw084146 DNI AG3448P-R 2.1.1.1
cat1-home-switch-sw041172 DNI AG3448P-R 2.1.1.1
cat1-home-switch-sw104 Accton 4610-54P 2.1.1.1
cat2-home-switch-sw102 Accton 4610-54P 2.1.1.1
cat5-home-switch-sw101 Accton 4610-54P 2.1.1.1
cat6-home-switch-sw103 Accton 4610-54P 2.1.1.1
cat5-home-switch-sw142311 DNI AG3448P-R 2.1.1.1
cat5-home-switch-sw072212 DNI AG3448P-R 2.1.1.1
cat5-home-switch-sw124376 DNI AG3448P-R 2.1.1.1
cat5-home-switch-sw143318 DNI AG3448P-R 2.1.1.1
cat5-home-switch-sw142313 DNI AG3448P-R 2.1.1.1

所需输出

cat1-home-switch-sw104 Accton 4610-54P 2.1.1.1
cat2-home-switch-sw102 Accton 4610-54P 2.1.1.1
cat5-home-switch-sw101 Accton 4610-54P 2.1.1.1
cat6-home-switch-sw103 Accton 4610-54P 2.1.1.1

如果我用这个选项来处理这个文件,它就可以工作

awk {'打印 $1'} | grep -E 'sw[0-9]{3}$'

但我也想保留所有其他列。

答案1

您可以用来\b匹配单词边界或\>匹配单词结尾:

grep -E 'sw[0-9]{3}\b' file
grep -E 'sw[0-9]{3}\>' file

或者grep对于数字后面的空格字符:

grep -E 'sw[0-9]{3} ' file

答案2

以下任一情况:

grep "cat.*Accton" file.txt

awk '/cat.*Accton/' file.txt

假设带有字符串的行Accton是唯一具有您要返回的模式的行:

grep Accton file.txt

awk '/Accton/' file.txt

您也可以在 sw10[0-9] 之后匹配一个空格:

grep "sw10[0-9] " file.txt

awk '/sw10[0-9] /' file.txt        

输出:

cat1-home-switch-sw104 Accton 4610-54P 2.1.1.1
cat2-home-switch-sw102 Accton 4610-54P 2.1.1.1
cat5-home-switch-sw101 Accton 4610-54P 2.1.1.1
cat6-home-switch-sw103 Accton 4610-54P 2.1.1.1

答案3

其他答案可能也适合您的目的,但假设您想确保/sw[0-9]{3}$/仅在该行的第一个字段中匹配,您可以使用awk

awk '$1 ~ /sw[0-9]{3}$/' input_file

相关内容