我正在自动化一个硬件任务,并且我正在使用的一个工具输出要连接的串行设备的列表。格式如下:
可用的设备(a):/dev/stuff
可选设备(b):/dev/西瓜
可用的设备(c):/dev/stuff
我需要找到出现“西瓜”的那一行,然后提取括号中的字母。因此,在这种情况下,它将是"b“。然而,这个顺序并不能保证被保存下来(这就是为什么我必须用“西瓜”来搜索)。
发布于 2017-07-19 10:18:54
你可以用sed和反向引用很容易做到这一点,例如
$ sed -n '/watermelon/s/^[^(]*(\([^)]*\).*$/\1/p' file
b哪里
sed -n禁止正常打印行,将行与西瓜匹配,s/find/replace/ -正常替换选项/watermalon/ ^[^(]*(\([^)]*\).*$ what in parens,并使用保存为first referent的内容另存为first reference
\1
p打印结果。如果您必须使用bash,那么您可以使用[[ ]]和=~运算符以及通过删除子字符串进行参数扩展,例如
while read -r line; do
[[ $line =~ watermelon ]] && { tmp="${line#*\(}"; echo "${tmp%)*}"; }
done < file输出
bhttps://stackoverflow.com/questions/45179814
复制相似问题