산출

산출

다음과 같은 경우 종료 코드 1을 반환하려면 awk가 필요합니다.

  • grep에서 awk로의 입력이 제공되지 않습니다.
  • 두 번째 필드가 비어 있거나 존재하지 않습니다.

grep이 "SOME_PHRASE"를 찾으면 작동하지만 해당 문구가 없으면 반환 코드($?)는 0입니다.

grep -m1 -i '^SOME_PHRASE' test.txt | awk '{ if (length($val)==0 || $val=="" || length($2)==0) exit 1; else print $2; }'

test.txt의 예

Test1 1234  
Phrase 214324

예상 출력:

$ echo $?  
1

답변1

실제로 다음을 결합할 수 awk있습니다 grep.

awk 'BEGIN{rv=1}                      # Default return value is 1
     tolower($0) ~ /^some_phrase/{    # Case insensitive search 
         if($2 != ""){                # If $2 is not empty,
            print $2                  # print the value,
            rv=0                      # and set the return value
         } 
         exit                         # one match, do not process any more line 
     } 
     END{exit rv}
' test.txt

답변2

내가 원하는 것을 달성하는 데 성공했습니다.

grep -m1 -i 'SOME_PHRASE' test.txt | awk 'END { if (NR==0 || $2=="")  exit 1; else print $2;}'

답변3

더 직접적으로:

$ awk 'toupper($1) ~ /^SOME_PHRASE/ { if ($2) { print $2; exit 0 } else { exit 1 } } END { exit 1 }' test.txt

첫 번째 필드는 대문자로 변경되고 대문자 패턴과 비교됩니다. 일치하는 항목이 있고 두 번째 필드가 있으면 해당 필드가 인쇄되고 스크립트는 종료 상태 0으로 종료됩니다. 그렇지 않으면(두 번째 필드가 없으면) 종료 상태 1로 종료됩니다. 패턴이 일치하지 않는 경우 스크립트는 입력 끝에 도달하면 종료 상태 1로 종료됩니다.

답변4

간단하게 유지하려면 모든 것을 하나의 지붕/도구 내부로 이동하는 것을 고려해야 합니다.

grep -qE '^SOME_PHRASE.*[^[:space:]]' yourfile

perl -0777ne 'exit !/^SOME_PHRASE.*?\S/m' yourfile

sed -ne '/^SOME_PHRASE.*[^[:space:]]/q;$q1' yourfile

산출

표시된 데이터의 경우 위 명령 중 하나를 실행한 직후 다음을 실행합니다.

echo "$?"
1

간단히

Perl slurpsmultiline전체 파일은 수정자를 사용하여 //m문자열에 대해 활성화된 줄 시작 부분에서 키워드를 찾습니다 . 이는 in & world가 상호보완적이라는 사실을 설명하기 위한 것입니다 !.SUCCESSPerlUnix

Seddon't print unless asked for모드에서 실행되며 해당 명령에도 종료 상태가 포함되어 있다고 -n가정합니다 .GNU sedq

관련 정보