我想从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脚本中执行此操作的最佳方法是什么?
谢谢!
小智 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 进行测试