配列の最初の要素を読み込みます。

配列の最初の要素を読み込みます。
defaults read -g AppleLanguages

次のようなものを生成します。


円、
ドイツ

最初の要素(この場合は「en」)だけを抽出したいと思います。

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

ただし、awk には常に検索パターンが含まれます。 「en」だけを生成するにはどうすればよいですか?

答え1

2行目だけを印刷します。これを行うには、次のようなさまざまなツールを使用できます。

  • sed

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

    説明する:は、2「次のコマンドを2行目でのみ実行」を意味します。通常の出力を抑制します-n(明示的に指示しない限り、何も印刷されません)。置換(s///)はカンマを削除し、置換が/p発生した末尾に行を印刷します。

  • perl

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

    説明するs/,//:現在の行番号($.が2)の場合は、最初のカンマ()を削除してその行を印刷します。これは-n、「入力ファイルを1行ずつ読み、与えられたスクリプトを各行-eに適用することを意味します。

  • Unixツール

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

    説明するhead -n 2最初の2行を印刷し、tail -n 1最後の行(つまり、ファイルの2行目)を印刷してtr -d ,カンマを削除します。

  • awk

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

    説明する: NR==2{}「2行目の括弧内の内容のみを実行してください。gsub(",","")最初のカンマを削除してください。」という意味です。

答え2

次のことができます。

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

説明する:

  • -F,,フィールド区切り文字として扱われます。
  • [^(](文字以外の文字が1つ以上含まれる行に適用されます。
  • print $1; exit:最初のフィールドを印刷してすぐに終了しますawk(したがって、パターンに一致する最初の行だけが印刷されます)。

関連情報