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 ]] || [[ -n "[Ss]topped" ]] || [[ -n "isn*t" ]]
등가 인 이
[[ $line =~ [Aa]borted ]] || [[ $line =~ [Ss]topped ]] || [[ $line =~ isn*t ]]
일치하지 인은 "또는"연산자 ||
정규식 일치 연산자 =~
보낸 사람보다 높은 우선 순위를 가지고 있기 때문에 마지막 두 조건은 항상 true이고 각 행은 통과합니다.
정규 표현식 매치 연산자 글로브 패턴을 사용하고도 참고, 그래서이 [[ $line =~ isn*t ]]
는 0 또는 그 사이에 n
더와 is
및 t
일치합니다, isn't
일치하지 않습니다. 내 대답의 역이다
case $line in
[Aa]borted | [Ss]topped | isn*t) echo "$line" ;;
*) echo FINE ;;
esac
: (ist
, isnt
, isnnt
등)
당신은 간결 경우 작성 티끌입니다이
[[ $line == [Aa]borted || $line == [Ss]topped || $line == isn*t ]]
를 작성하는 목적.
고맙습니다.하지만 내 코드에 무엇이 잘못 되었습니까? – user3834663