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

관련 정보