我在檢查這三個SUBSTRING是否在STRING中。如何匹配子串,在shell中進行字符串的常規匹配?
STRING:
active
mac address ec:f4:bb:e1:0c:18
Link Up - speed 10000 Mbps - full-duplex
LACP actor_state ACTIVE AGGREGATION SYNC COLLECTING DISTRIBUTING
SUBSTRING:
- 活性
- ACTIVE
- DISTRIBUTING
我嘗試在我的shell腳本使用這些:
dpdkb2_slave0_res=$(/usr/local/bin/ovs-appctl dpdk/bond-show dpdkb2 | sed -n '5,8p')
dpdkb2_slave1_res=$(/usr/local/bin/ovs-appctl dpdk/bond-show dpdkb2 | sed -n '14,17p')
s0_active=$(expr index $dpdkb2_slave0_res 'active')
if [[ -n "$dpdkb2_slave0_res" && $s0_active -ne 0 ]] ; then
ok_output "dpdkb2 status is ok:"
ok_output "$dpdkb2_res"
但在4號線,報錯:expr的:語法錯誤。
但是,當我在shell中運行expr index $dpdkb2_slave0_res 'active'
命令時沒關係。
- 如何解決這個問題?
- 如何做字符串位置,搜索,替換?哪一個最有效,
expr
或{string##}
或awk
或sed
?
我不得不說要使用shell很難,shell沒有辦法處理字符串,shell必須使用awk,sed,grep等工具來處理字符串。我不知道爲什麼。
最後一個問題:
- 如何三個世界搭配在一起?我想使用
active*ACTIVE*DISTRIBUTING
,但awk
和sed
都報告錯誤。
如果只有*檢查這三個子字符串是否在STRING *(爲你寫) - 它可以用一個可實現在線方法 – RomanPerekhrest
關於#3 - 'sed -r'/(active | ACTIVE | DISTRIBUTING)/'' – stevesliva