grep 및 sed 명령

grep 및 sed 명령

다음과 같은 파일이 있다고 가정합니다.

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf

sed, grep및 가 포함된 마지막 두 문자가 있는 문자열만 검색하고 싶습니다 awk.

답변1

grep 및 sed 명령

원래 질문의 형식이 잘못된 것 같습니다. 따라서 가장 간단한 grep 및 sed 명령은 다음과 같습니다.

egrep '[0-9]{2}$' /path/to/file

그리고

sed -rn '/[0-9]{2}$/p' /path/to/file

이러한 명령에 대한 정보를 포함하고 한 줄에 여러 문자열을 사용하여 작업하는 설명도 아래에 남겨 두겠습니다. 여전히 작동하지만 잠재적으로 관련 없는 추가 코드가 포함됩니다.


그렙

grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file

설명

  • [^ ]*공백이 아닌 문자를 원하는 수만큼 일치시킵니다.
  • [0-9]\{2\}두 자리 숫자를 일치시킵니다. (대신 사용해도 됩니다 [0-9][0-9].)
  • ( |$)숫자는 "단어"의 끝이어야 하므로 뒤에는 공백이나 줄 끝 종결자가 와야 합니다.

대신 중괄호를 이스케이프 처리할 필요가 없으므로 확장 grep을 사용하는 것을 선호합니다. 따라서,

grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file

또는

egrep '[^ ]*[0-9]{2}( |$)' /path/to/file

질문이 편집되었지만 한 줄에 일치하는 항목이 여러 개 있고 일치하는 항목만 출력하려면 플래그를 사용하세요 -o. 즉

egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file

세드

</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'

설명

  • </path/to/file tr ' ' '\n'파일을 입력하고 모든 공백을 줄 바꿈으로 변경하십시오.
  • sed -rn와 함께 확장 정규식(위와 유사)을 사용 하고 를 사용 -r하여 모든 출력을 즉시 인쇄하지 마세요 -n.
  • [0-9]{2}$이 정규식은 위의 grep 줄과 유사합니다. 그러나 이미 모든 공백을 제거했으므로 시작 부분에 공백이 아닌 문자를 정의할 필요가 없고 끝에 가능한 공백도 정의할 필요가 없습니다.
  • /<regex>/p일치하는 줄을 인쇄하십시오 <regex>.

답변2

sed게다가 awk트릭을 수행해야합니다!

sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'

만약에파일에 다음 문자열이 포함되어 있습니다한 줄씩 awk트릭을 수행해야합니다!

awk '/[0-9][0-9]$/' file1

만약에다음으로 끝나는 문자열을 일치시키려고 합니다.정확히 두 개의 숫자와아니 더, 대신 다음 명령을 사용하십시오.

sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/'

그리고

awk '/[^0-9][0-9][0-9]$/' file1

산출:

adasfddfd09
dsassd90897
sdddsdf56 

설명

  • sed입력 문자열을 여러 문자열로 분할합니다.
  • awk정확히 두 개의 숫자로 끝나는 모든 문자열과 일치합니다.

관련 정보