한 쌍의 괄호 사이의 모든 것을 삭제하기 위해 하나의 라이너를 sed?


15

내가 원하지 않는 대괄호 [] 사이에있는 내용으로 가득 찬 일부 텍스트로 작업하고 있습니다. 괄호를 직접 삭제할 수 있으므로 하나의 라이너가 필요하지 않지만 그 사이의 모든 것을 제거하는 하나의 라이너가 필요합니다.

대괄호 대신 괄호 ()는 어떻습니까?

답변:


20

[some text]빈 문자열로 교체하십시오 . 중첩 된 대괄호를 구문 분석하지 않으려 some text는 경우 대괄호를 포함 할 수 없습니다.

sed -e 's/\[[^][]*\]//g'

참고 브래킷 식에서 것을 [^][]아무것도하지만 일치하는 []의이 ]먼저 와야. 일반적으로 a ]는 문자 세트를 종료하지만 세트의 첫 번째 문자 ( ^보완 문자 뒤 ) 인 경우 ]자체를 의미합니다.

중첩 된 대괄호를 구문 분석하거나 대괄호 텍스트가 여러 줄에 걸쳐있을 수있는 경우 sed가 올바른 도구가 아닙니다.


고마워, @Gilles ... btw, 그것은 여러 줄에 걸쳐있을 수 있지만, 나는 라인에 합류하기 위해 펄 스크립트를 사용하고 있습니다 ...
ixtmixilix

@ixtmixilix : Perl 스크립트가 있으면 괄호 안의 텍스트도 제거 할 수 있습니다. Perl에서 쓸 수 있습니다 s/\[[^\[\]]*\]//g(즉, 문자 집합의 멤버를 이스케이프하기 위해 백 슬래시 사용).
Gilles 'SO- 악마 그만해'

@Gilles [^] [] 정확히 plz에 대해 더 자세히 설명해 주시겠습니까? 감사합니다
Arash

1
@arashams […]= 문자 세트. ^첫 번째 문자는 세트를 보완한다는 의미입니다. ]일반적으로 세트의 끝을 표시하지만, 이외의 첫 번째 문자 인 ^경우 일반 문자입니다. 빈 세트 또는 빈 세트의 보완은 허용되지 않습니다. 그런 다음 [평범하고 ]세트를 끝냅니다.
Gilles 'SO- 악마 그만해'

@Gilles TNX 도와하지만 여전히 나는 그것을 얻을 해달라고 :( 그 평균 선량 것 "^ 첫 번째 문자 수단은 세트에 추가로"나는 무엇을하고 있는지 의미를 예는이 모든 내용과 일치를 위해???
아라 쉬

9

이 명령 sed -e 's/([^()]*)//g'은 대괄호 대신 괄호를 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.