파일에 다음과 같은 문자열이 포함되어 있습니다.
site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
siteLevel1.2,Levelv2
Level1.2,Levelv2
grep
단어를 검색하는 데 사용하고 싶습니다 . 나는 다음 명령을 사용했습니다.
grep -w "Level1.2" file1.txt > result.txt
출력은 다음과 같습니다
site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
Level1.2,Levelv2
하지만 첫 번째 열을 무시하려면 grep이 필요합니다. 출력에 다음이 필요합니다.
site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
가능한 한 제가 직접 명령을 내릴 수 있도록 도와주세요. 나는 새로운 명령과 검색 방법을 선호하지 않습니다. 두 번째 열부터 검색하면 됩니다.
답변1
이는 간단한 수정입니다.내 대답관련 질문에:
grep '^[^,]*,.*Level1\.2' myfile.txt
또는 더 간단하게는 다음과 같습니다.
grep ',Level1\.2' myfile.txt
일치 문자열의 앞 쉼표는 첫 번째 필드의 항목이 일치하지 않음을 보장합니다.
Level1.20
또는 가능성이 있고 Level1.2a
이러한 경우를 제외하려면 단어 구분 기호를 추가해야 합니다.
grep ',Level1\.2\b' myfile.txt
egrep
이 경우에는 (또는 ) 이 필요하지 않습니다 grep -E
.
답변2
-P
긍정적인 LookBehind와 함께 옵션(PCRE)을 사용합니다 .
grep -Pw "(?<=,)Level1\.2" file.txt
산출:
site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3