다음과 같은 파일이 있다고 가정해 보겠습니다.
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
두 자리 숫자로 끝나는 모든 문자열과 일치합니다.