我自动执行硬件任务,我使用的工具之一输出要连接的串行设备列表。格式如下:
可用设备(a):/ dev / stuff
可用设备(b):/ dev / watermelon
可用设备(c):/ dev / stuff
我需要找到"西瓜"发生在括号内然后提取字母。所以在这种情况下,它将是" b"。但是,订单不能保证保留(这就是为什么我必须通过"西瓜")进行搜索。
答案 0 :(得分:0)
您可以使用sed
和反向引用轻松完成,例如
$ sed -n '/watermelon/s/^[^(]*(\([^)]*\).*$/\1/p' file
b
其中
sed -n
禁止正常打印行/watermalon/
与西瓜相匹配,s/find/replace/
- 正常的替代选项
^[^(]*(\([^)]*\).*$
什么是parens并保存为第一个参考\1
替换为保存为第一参照物的内容p
打印结果。如果您必须使用bash,那么您可以使用[[ ]]
和=~
运算符以及参数扩展和子字符串删除来执行此操作,例如
while read -r line; do
[[ $line =~ watermelon ]] && { tmp="${line#*\(}"; echo "${tmp%)*}"; }
done < file
<强>输出强>
b