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

jch*_*jch 6 bash

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

ex:- date=crossed 122 name=foo , userid=234567 , sessionid=2233445axdfg5209  associd=2
Run Code Online (Sandbox Code Playgroud)

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

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

name=foo
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

gle*_*man 7

grep在这里很有用:

grep -o 'name=[^ ,]\+'
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)

按预期打印name=foo

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