sed에서 부분 문자열과 일치하는 모든 단어를 삭제하십시오.


2

다음 줄이 있다고 가정하십시오.

group blue:green yellow green redtomblue black !greyTOMwhilte !purple redblue

sed를 사용하여 문자열 "tom"또는 "TOM"을 포함하는 모든 단어를 삭제해야합니다.

나는 이것을 멀리 얻었습니다.

sed 's/^ *\(.*\)[!]*[A-Za-z0-9_]*[tT]\{1\}[oO]\{1\}[mM]\{1\}[A-Za-z0-9_]*\(.*\)/\1 \2/g'

그러나 이것은 마지막 항목 만 삭제하고 모든 항목을 삭제 하지는 않습니다. 결과 위의 예를 사용하면 다음과 같습니다.

group blue:green yellow green redtomblue black !grey  !purple redblue

sed특정 하위 문자열 "tom"또는 "TOM"을 포함하는 단어를 제거 하려면 어떻게 해야합니까?

답변:


2

이건 어때?

sed 's/\S*\(tom\|TOM\)\S*//g'

각하 GNU 이외의 버전에서는 다음과 sed같이 작동합니다.

sed 's/[a-zA-Z0-9_!]*[Tt][Oo][Mm][a-zA-Z0-9_!]*//g'

이것은 모든 대체 할 단어 (0 개 이상의 공백이 아닌 문자 (로 시작하는 즉, 문자열 \S) 다음 tom또는 TOM빈 문자열로 다시 0 개 이상의 공백이 아닌 문자).
아마도 이중 공백도 제거해야합니다.

sed 's/\S*\(tom\|TOM\)\S*//g;s/\(\s\)\s*/\1/g'

@ Sims : non-GNUsed 버전 과 호환되는 다른 버전을 추가했습니다 .
bmk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.