배열의 첫 번째 요소를 읽습니다.

배열의 첫 번째 요소를 읽습니다.
defaults read -g AppleLanguages

다음과 같은 것을 생성합니다.

(
엔,
독일
)

첫 번째 요소(이 경우 "en")만 추출하고 싶습니다.

defaults read -g AppleLanguages | awk '/\(/ , /,/'

그러나 awk에는 항상 검색 패턴이 포함됩니다. "en"만 생성하려면 어떻게 해야 하나요?

답변1

두 번째 줄만 인쇄하면 됩니다. 이를 위해 다음과 같은 다양한 도구를 사용할 수 있습니다.

  • sed

    defaults read -g AppleLanguages | sed -n '2s/,//p;' file 
    

    설명하다:는 2"다음 명령을 두 번째 줄에서만 실행"을 의미합니다. 일반 출력을 억제합니다 -n(명시적으로 지시하지 않는 한 아무 것도 인쇄되지 않습니다). 바꾸기( s///)는 쉼표를 제거하고 /p대체가 발생한 끝 부분에 줄을 인쇄합니다.

  • perl

    defaults read -g AppleLanguages | perl -ne 's/,// && print if $.==2'
    

    설명하다s/,//: 현재 줄 번호( $.가 2 )이면 첫 번째 쉼표( )를 제거하고 해당 줄을 인쇄합니다. 이는 -n"입력 파일을 한 줄씩 읽고 주어진 스크립트를 -e각 줄에 적용한다는 의미입니다.

  • 유닉스 도구

    defaults read -g AppleLanguages | head -n 2 | tail -n 1 | tr -d ,
    

    설명하다: head -n 2처음 두 줄을 인쇄하고 tail -n 1마지막 줄(즉, 파일의 두 번째 줄)을 인쇄하고 tr -d ,쉼표를 제거합니다.

  • awk

    defaults read -g AppleLanguage | awk 'NR==2{sub(",","");print}' 
    

    설명하다: NR==2{}"두 번째 줄에서 괄호 안의 내용만 실행하세요. gsub(",","")첫 번째 쉼표를 제거하세요." 라는 뜻입니다.

답변2

다음을 수행할 수 있습니다.

awk -F, '/[^(]/{print $1;exit}'

설명하다:

  • -F,: ,필드 구분자로 처리됩니다 .
  • [^(]: (문자가 아닌 문자가 하나 이상 포함된 줄에 적용됩니다.
  • print $1; exit:첫 번째 필드를 인쇄하고 즉시 종료합니다 awk(따라서 패턴과 일치하는 첫 번째 줄만 인쇄됩니다).

관련 정보