0
我正在自動執行硬件任務,並且我正在使用的其中一個工具輸出要連接的串行設備列表。格式如下:基於關鍵字w/Bash提取字符串中的元素
推介裝置的(a)是:/ dev /東西
推介裝置(B)是:/ dev /西瓜
推介裝置(c)中是:/ dev /東西
我需要找到「西瓜」出現的行,然後提取括號內的字母。所以在這種情況下,它會是「b」。但是,這個順序不保證保存(這就是爲什麼我必須用「西瓜」搜索)。
我正在自動執行硬件任務,並且我正在使用的其中一個工具輸出要連接的串行設備列表。格式如下:基於關鍵字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