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
(したがって、パターンに一致する最初の行だけが印刷されます)。