基于关键字w/Bash提取字符串中的元素
问题描述:
我正在自动执行硬件任务,并且我正在使用的其中一个工具输出要连接的串行设备列表。格式如下:基于关键字w/Bash提取字符串中的元素
推介装置的(a)是:/ dev /东西
推介装置(B)是:/ dev /西瓜
推介装置(c)中是:/ dev /东西
我需要找到“西瓜”出现的行,然后提取括号内的字母。所以在这种情况下,它会是“b”。但是,这个顺序不保证保存(这就是为什么我必须用“西瓜”搜索)。
答
你可以很容易地用sed
和反向引用,例如,
$ sed -n '/watermelon/s/^[^(]*(\([^)]*\).*$/\1/p' file
b
凡
-
sed -n
压制线的正常打印, -
/watermalon/
匹配西瓜行, -
s/find/replace/
- 正常的替代选项- 找到
^[^(]*(\([^)]*\).*$
是什么parens并保存为第一参考 - 什么被保存为第一指涉
- 找到
-
p
打印结果替换\1
。
如果必须使用bash,那么你就可以[[ ]]
做到这一点,与子去除,例如在=~
运营商和参数扩展
while read -r line; do
[[ $line =~ watermelon ]] && { tmp="${line#*\(}"; echo "${tmp%)*}"; }
done < file
输出
b