【问题标题】:Shell commands to match key value pairs用于匹配键值对的 Shell 命令
【发布时间】:2011-01-21 01:31:14
【问题描述】:

我有一个文件,其中包含key=value 对的列表,每对都在自己的行中。使用 shell 命令获取指定键的值的最佳方法是什么?

【问题讨论】:

  • bourne、C 或 bash shell
  • 我最终得到了这个:grep "key" filename | sed '/key=//'

标签: regex shell scripting


【解决方案1】:

怎么样

grep "key" my_file | cut -d'=' -f2

【讨论】:

  • 如果文件有key=value参数的水平列表怎么办?
  • 海报上写着“各行其道”。但是,是的,如果每行不止一个,那么这是行不通的。
【解决方案2】:

这就是我在 ksh 中的做法。

FOO=$(grep "^key=" $filename | awk -F"=" '{print $2}')

您也可以使用 cut 代替 awk。如果你用空格分隔密钥对,你可以去掉 -F"=".

【讨论】:

  • grep 可以省略。 awk 可以做到这一切。 awk -F"=" '/^key=/{print $2}'
【解决方案3】:
read -r -p "Enter key to fetch: " key
awk -vk="$key" -F"=" '$1~k{ print "value for "k" is "$2} ' file

输出

$ ./shell.sh
Enter key to fetch: key1
value for key1 is value1

或者你可以只使用 shell(例如 bash)

read -r -p "Enter key to fetch: " key    
while IFS="=" read -r k v
do
    case "$k" in
        *"$key"* ) echo "value of key: $k is $v";;
    esac
done <"file"

【讨论】:

  • 可能甚至不需要正则表达式:awk ... '$1 == k {print $2}' file
  • 取决于。如果 OP 需要完全匹配。如果不是,则正则表达式是合适的。 OP 可以使用 regexp 实现 SQL “like” 等效项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多