
단어의 문자 중 하나에 "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"