Sed/awk/perl은 주어진 문자열의 모든 접두사와 일치합니다.

Sed/awk/perl은 주어진 문자열의 모든 접두사와 일치합니다.

내 단어가 접두사이거나 해당 줄이 내 단어의 접두사인 파일의 모든 줄을 일치시키고 싶습니다. 예를 들어 "abc"를 검색하면 다음과 일치해야 합니다.

aab
abc abcd abcxyz



하지만:

xabc
zzab
xaz

"내 단어는 다음의 접두사입니다" 부분은 쉽습니다. ^abc물론 " "만 일치시키면 됩니다. 하지만 "행은 내 단어의 접두사입니다" 비트에 대한 해결책을 찾지 못했습니다. awk에서 뭔가를 시도했지만 줄 내용을 정규식의 일부로 만들 수 없었습니다.

답변1

처리해야 할 두 가지 경우가 있습니다. 행이 검색 문자열보다 짧거나 긴 경우입니다.

길이가 더 길면 줄의 시작 부분이 테스트 문자열과 같은지 테스트하고 싶을 것입니다.

길이가 더 짧으면 검색 문자열의 시작 부분이 해당 줄과 같은지 테스트하고 싶을 것입니다.

길이가 동일한 경우 두 방법 중 하나가 작동합니다.

awk -v search=abc 'length() > length(search) ? substr($0, 1, length(search)) == search : substr(search, 1, length()) == $0' inputfile

관련 정보