sed + 단어의 문자 중 하나에 "m" 또는 "M"이 포함된 경우 단어를 제거하는 방법

sed + 단어의 문자 중 하나에 "m" 또는 "M"이 포함된 경우 단어를 제거하는 방법

단어의 문자 중 하나에 "m" 또는 "M"이 포함된 경우 해당 단어를 제거하는 방법은 무엇입니까?

나는 이것을 시도했지만 작동하지 않습니다.

 echo 6.5G 66.5m | sed -e 's/[m][M]//g'

답변1

귀하의 sed 명령은 다음과 같습니다

s/[m][M]//g

mM일치를 요청했기 때문에 입력에서 문자열만 제거됩니다 .

  • 세트에 있는 모든 것 m, 그 뒤에
  • 세트에 있는 모든 것 M.

아마도 대신 글을 쓰려고 했을 것입니다 [Mm]. 하지만 명령 /i에 옵션을 추가하면 동일한 효과를 얻을 수 있습니다 s.

s/m//ig

이제 이는 모든 대문자 또는 소문자를 제거합니다 m.

$ echo 6.5G 66.5m | sed -e s/m//ig
6.5G 66.5

귀하의 질문은 이 문자가 포함된 전체 단어를 제거하는 방법을 묻습니다. 이를 위해서는 앞뒤에 공백이 아닌 문자를 모두 일치시켜야 합니다. [^ ]공백이 아닌 문자와 일치하고 [^ ]*0개 이상의 공백이 아닌 문자와 일치하므로 우리는

s/[^ ]*m[^ ]*//ig

테스트하기:

$ echo 6.5G 66.5m | sed -e 's/[^ ]*m[^ ]*//ig'
6.5G 

그리고

$ echo Five Merry Women went fishing | sed -e 's/[^ ]*m[^ ]*//ig'
Five   went fishing

답변2

$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G

"m"과 "M"은 하나의 패턴을 형성합니다. 작동하지 않는 버전은 "m" 다음에 "M"이 오는 것을 찾습니다.

답변3

제거하고 싶다면 이것을 시도해 볼 수 있습니다

[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5

답변4

이렇게 해 보세요. 'm' 또는 'M'이 포함된 줄이 삭제됩니다.

echo 6.5G 66.5m | sed "/[mM]/d"

관련 정보