假设我有一个命令list kittens
,它在我的终端中以这种多行格式返回一些东西(在这个确切的布局中):
[ 'fluffy'
'buster'
'bob1' ]
如何获取 bob1 并分配给变量以供脚本使用?到目前为止,这是我的非工作尝试。
list kittens | grep "'([^']+)' \]"
我并不太熟悉grei on cli并且遇到带引号等语法的问题。
答案 0 :(得分:1)
如果您知道bob1
将在最后一行,您可以像这样捕获它:
myvar="$(list kittens | tail -n1 | grep -oP "'\K[^']+(?=')")"
这使用tail
查找最后一行,然后grep
使用前瞻和正则表达式中的lookbehind来提取引号内的部分。
编辑:以上假设您使用的是GNU grep
(适用于-P
模式)。这是sed
的另一种选择:
myvar="$(list kittens | tail -n1 | sed -e "s/^[^']*'//; s/'[^']*$//")"
答案 1 :(得分:1)
可以由awk
单独完成:
list kittens |awk 'END{gsub(/\047|[[:blank:]]|\]/,"");print $0}'
bob1
示例:
echo "$kit"
[ 'fluffy'
'buster'
'bob1' ]
echo "$kit" |awk 'END{gsub(/\047|[[:blank:]]|\]/,"");print $0}'
bob1
将其分配给任何变量:
var=$(list kittens |awk 'END{gsub(/\047|[[:blank:]]|\]/,"");print $0}'
解释:
END{}
:结束块用于从最后一行获取数据,因为我们只对最后一行感兴趣。
gsub
:这是用于搜索和替换任务的awk's
内置函数。这里删除了空格和双引号和单引号。并非\047
用于单引号替换。