读取数组中的第一个元素

读取数组中的第一个元素
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(因此仅打印与模式匹配的第一行)

相关内容