
다음과 같은 파일이 있다고 가정합니다.
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
정확히 두 개의 숫자로 끝나는 모든 문자열과 일치합니다.