%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%B4%20%EB%B3%B4%EC%95%98%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
어떻게 선택하나요? "유닉스"와 "유닉스"
내 생각에는
awk를 사용하세요
$ awk ~"Unix|unix" {print $0}.aa.txt
grep을 사용하는 단서 없음
sed 사용
$ sed "/Unix/p" aa.txt | "/unix/p" aa.txt
내 생각엔 이것들이 모두 잘못된 것 같아
그러니 대답해주세요..모르겠습니다..
답변1
문자열 과 일치 Unix
하고 또는 중 하나가 되는 unix
정규식 입니다 .[Uu]nix
[Uu]
U
u
다음 세 가지 도구를 사용하여 이 표현식과 일치하는 모든 행을 추출할 수 있습니다.
awk '/[Uu]nix/' file
이것은 주어진 조건이 일치하면 현재 레코드(행)를 인쇄한다는
awk
사실을 이용하는 "짧은 형식" 프로그램 입니다.awk
불필요한 코드를 모두 포함하는 "긴 손" 변형은 다음과 같습니다awk '$0 ~ /[Uu]nix/ { print $0 }' file
.grep '[Uu]nix' file
이
grep
유틸리티는 단순히 주어진 표현식과 일치하는 행을 추출합니다.sed -n '/[Uu]nix/p' file
이 명령은 각 줄의 기본 인쇄를
sed
해제(사용 )합니다.-n
그런 다음 주어진 표현식과 일치하는 행만 명시적으로 인쇄합니다.를 사용하여
sed
다음을 선택할 수도 있습니다.삭제보고 싶지 않은 줄은 각 줄의 기본 인쇄를 사용하여 나머지 줄을 인쇄합니다.sed '/[Uu]nix/!d' file
awk
, grep
및 에서 sed
이 grep
유틸리티는 특정 표현식과 일치하는 행을 추출하는 작업에 가장 적합합니다. awk
더 많은 처리 또는 집계가 필요한 작업과 sed
상태 보존이 거의 또는 전혀 필요하지 않은 한 줄 수정 에 가장 자주 사용됩니다 (그러나 세 도구 모두 해당 응용 프로그램에서 중복됩니다).
답변2
이 문제의 더 까다로운 부분은 "일치"입니다.단어유닉스냐 유닉스냐”
입력 파일 사용
$ cat -n file
1 how do I pick them? both "Unix" and 'unix'
2 Could be just Unix
3 or just
4 unix at the start of line
5 do not match unixy or munix
1, 2, 4행은 일치해야 하지만 5행은 일치하지 않습니다. "unix"는 "단어"로 표시되지 않기 때문입니다.
또한 이러한 도구가 내장된 기능을 통해 대소문자를 구분하지 않는 일치를 수행하는 방법도 보여줍니다.
grep
$ grep -i unix file how do I pick them? both "Unix" and 'unix' Could be just Unix unix at the start of line do not match unixy or munix
이제
-w
("전체 단어") 옵션을 추가합니다.$ grep -i -w unix file how do I pick them? both "Unix" and 'unix' Could be just Unix unix at the start of line
GNU sed
$ gsed -n '/unix/I p' file how do I pick them? both "Unix" and 'unix' Could be just Unix unix at the start of line do not match unixy or munix
이제 GNU 정규 표현식 단어 경계 표시를 추가하세요.
$ gsed -n '/\<unix\>/I p' file how do I pick them? both "Unix" and 'unix' Could be just Unix unix at the start of line
( Mac에서 Homebrew를 통해
gsed
GNU sed를 설치했습니다 )GNU awk
$ gawk -v IGNORECASE=1 '/unix/' file how do I pick them? both "Unix" and 'unix' Could be just Unix unix at the start of line do not match unixy or munix
$ gawk -v IGNORECASE=1 '/\<unix\>/' file how do I pick them? both "Unix" and 'unix' Could be just Unix unix at the start of line
GNU가 아닌 도구: Mac의 기본 awk 및 sed와 같은
\<
\>
이러한 도구는 GNU 정규식을 사용하지 않으며 편리한 단어 경계 도 없습니다 . 대소문자를 구분하지 않는 일치도 사용할 수 없습니다. 결과는 그다지 예쁘지 않습니다./usr/bin/sed -En '/(^|[^_[:alnum:]])[Uu]nix($|[^_[:alnum:]])/ p' file /usr/bin/awk 'tolower($0) ~ /(^|[^_[:alnum:]])unix($|[^_[:alnum:]])/' file /usr/bin/awk -F'[^[:alpha:]]+' '{for (i=1; i<=NF; i++) if (tolower($i) == "unix") {print; next}}' file