단어만 포함된 .csv 데이터 행을 유지 dog
하고 cat
두 번째 열에서만 확인할 수 있습니다. "dog"라는 단어가 다른 열에는 나타나지만 두 번째 열에는 나타나지 않으면 무시해야 합니다.
예를 들어 다음과 같은 경우가 있습니다.
email1.com dog
email2dog.com steve
email3.com cat
예상 출력:
email1.com dog
email3.com cat
긴 단어 목록을 유지해야 할 수도 있으므로 가능하면 다른 파일에서 해당 단어를 로드하세요.
답변1
그리고 sed
:
$ sed -n -e 's/dog$/&/p' -e 's/cat$/&/p' file
email1.com dog
email3.com cat
또는 다음을 사용할 수 있습니다 awk
.
awk '$2~/^dog|cat$/' file
답변2
여러 가지 방법:
dog
or가cat
항상 줄의 마지막 단어인 경우 :awk '/(dog|cat)$/' file grep -E '(dog|cat)$' file sed -n '/\(dog\|cat\)$/p' file perl -ne 'print if /(dog|cat)$/' file
dog
또는cat
두 번째 어디에나 나타날 수 있는 경우공백으로 구분대지:awk '$2~/dog|cat/' file grep -E '^\S+\s+\S*(dog|cat)\S*\s*' file perl -ane 'print if $F[1]=~/dog|cat/' file sed -nr '/^\S+\s+\S*(dog|cat)\S*\s*/p' file sed -n '/^\S\+\s\+\S*\(dog\|cat\)\S*\s*/p' file
파일에서 검색 패턴을 읽으려면 다음을 수행할 수 있습니다.
awk '{if(NR==FNR){a[$0]++; next}for(p in a){if($2~p){print}}}' patterns file
답변3
{ sed 's/[]$^&\./*[]/\\&/g;s/$/$/'|
grep -f- ./greppedfile
} <words
다수의 일치 패턴을 처리하는 상황을 처리할 수 있습니다.words
각 줄에는 패턴이 포함되어 있습니다. 가능한 정규 표현식을 조심스럽게 이스케이프 처리합니다.메타 문자그러면 결과 패턴이 줄 끝에 고정되므로 그 안의 모든 문자는words
문자 그대로 일치 grep
하며 패턴은 다음과 같은 경우에만 일치합니다.단어줄 끝에서 발생합니다. 이것이 내가 원하는 것을 이해했다고 생각하는 것입니다.
일반적으로 메타문자 이스케이프 가 없는 고정 문자열 모드를 grep
사용할 수 있기 때문에 이와 같은 메타문자 이스케이프가 없습니다 . -F
그러나 이는 또한 패턴을 고정하기 위해 메타 문자를 사용할 수 없으므로 $
얻은 것을 사용한다는 의미이기도 합니다.
답변4
grep
PCRE와 함께 사용:
$ grep -P '^[^ ]+\s+dog|cat(?=\s|$)' file.txt
email1.com dog
email3.com cat
dog
cat
그러면 행의 두 번째 열에 나타나는 행만 인쇄됩니다 .