如何从bash shell脚本中的一行中提取一个单词

时间:2011-11-01 19:03:38

标签: bash

我想从bash脚本中的句子中提取一个单词。它使用逗号和空格作为分隔符。

ex:- date=crossed 122 name=foo , userid=234567 , sessionid=2233445axdfg5209  associd=2

我有上面的句子,其中有趣的部分是name = foo。键名总是相同但字符串foo可能会有所不同。其他参数也可能存在,也可能不存在。

我需要提取上面的键值对。 所以输出将是:

name=foo

在shell脚本中执行此操作的最佳方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:7)

grep在这里很有用:

grep -o 'name=[^ ,]\+'

答案 1 :(得分:3)

如果您知道name之后的值永远不会包含空格或引号,并且没有其他复杂情况,那么您可以使用sed单行代码执行此操作:

sed -e 's/^.*\(name=[^ ,]*\).*$/\1/'

这只是说要用匹配name=的部分替换整行,后跟任意数量的非逗号,非空格字符。

如果有name="quoted string"name=string\ with\ escaped\ spaces等可能性,这将不会非常强大。但它适用于有限的案例。

如果要将结果存储在shell变量中,可以执行类似(在bash中)的操作

pair=$(echo $input | sed -e 's/^.*\(name=[^ ,]*\).*$/\1/')
echo $pair

按预期打印name=foo

使用GNU sed 4.2.1和Bash 4.2.10进行测试

答案 2 :(得分:1)

如果“name = foo”始终位于该行的相同位置,您可以使用: awk '{print($3)}',这将提取您的行中的第三个单词name=foo