我有这个文本文件:
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