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
每一行。Unix工具
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
(因此仅打印与模式匹配的第一行)