基于关键字w / Bash提取字符串中的元素

时间:2017-07-19 02:05:40

标签: regex bash

我自动执行硬件任务,我使用的工具之一输出要连接的串行设备列表。格式如下:

可用设备(a):/ dev / stuff

可用设备(b):/ dev / watermelon

可用设备(c):/ dev / stuff

我需要找到"西瓜"发生在括号内然后提取字母。所以在这种情况下,它将是" b"。但是,订单不能保证保留(这就是为什么我必须通过"西瓜")进行搜索。

1 个答案:

答案 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