grep -vE '\<(R|is r)unning\>' input.txt
的\<
和\>
標記字界限,這樣你就不會過濾掉 「這個運行」
在外殼
while IFS= read -r line; do
case $line in
*"Running"* | *"is running"*) echo FINE ;;
*) echo "$line" ;;
esac
done < input.txt
問題在你的代碼:這條線
[[ $line =~ [Aa]borted || [Ss]topped || isn*t ]]
是不相當於該
[[ $line =~ [Aa]borted ]] || [[ $line =~ [Ss]topped ]] || [[ $line =~ isn*t ]]
它是相當於該
[[ $line =~ [Aa]borted ]] || [[ -n "[Ss]topped" ]] || [[ -n "isn*t" ]]
因爲 「或」 運營商||
比正則表達式匹配運算=~
由於更高的優先級最後2個條件總是如此,每條線都通過。
還請注意,您在使用glob模式使用正則表達式匹配操作符,所以這[[ $line =~ isn*t ]]
不匹配isn't
,它將匹配is
和t
零或之間有更多n
。 (ist
,isnt
,isnnt
等)
你打算寫這個
[[ $line == [Aa]borted || $line == [Ss]topped || $line == isn*t ]]
這是微塵簡明寫有情況:
case $line in
[Aa]borted | [Ss]topped | isn*t) echo "$line" ;;
*) echo FINE ;;
esac
這是我回答的倒數。
謝謝..但你能告訴我的代碼中有什麼問題嗎? – user3834663