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

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두 자리 숫자로 끝나는 모든 문자열과 일치합니다.

관련 정보