2012-05-22 4 views
0

는 말할 수 :UNIX : sed를 사용하여 문자열의 내용을 제거하고 바꿉니 까? 내가 문자열을

<lic><ic>This is a string</ic>, welcome to my blog.</lic> 

내가 <ic></ic> 태그 없애 나오지도 사용할뿐만 아니라, 문자 태그 <lic>

가장 빠른 방법은 무엇입니까 </lic> 이것을하기 위해? 나는 sed에 아주 새롭다. 이것이 awk에서 어떻게 이루어질 것인가? awk이 열과 유사한 텍스트를 사용하는 것이 훨씬 낫다는 것을 알고 있으므로 sed 사용법을 배우려는 경향이 더 강하게 느껴집니다.

언제나 감사드립니다. 미리 감사드립니다.

+0

? 다른 사람 없습니까? – paxdiablo

+1

sed를 사용하여 xml을 구문 분석하지 않으려는 경우 : http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

답변

3
sed -e 's%</\{0,1\}l\{0,1\}ic>%%g' 

\{0,1\}는 PCRE의 ?의 동등한를 작성하는 표준 sed 방법입니다. 정규식은 비트를 분리하기 위해 %을 사용합니다. 다음에 < 다음에 슬래시가 올 수 있으며 그 뒤에 l이오고 그 다음에 ic>이오고 그 뒤에는 입력란이 전역 적으로 대체됩니다.

일부 버전의 sed을 사용하면 대체 시스템을 지정할 수 있지만 모든 곳에서 사용할 수 있습니다.

+0

정말 고마워요! 이것은 첫 번째 시도에서 효과가있었습니다! 우연히 awk를 사용하여 이것이 어떻게 이루어질 수 있는지 알고 있습니까? –

+0

'awk'로 할 수있을 것이라고 확신합니다; 나는 awk을 사용하지 않을 것이다. 나는 '사소한'펄 (Perl)을 사용할 것이다 :'perl -pe '% %% g''. 백업으로 파일의 인위적 오버 우팅도 가능합니다. 'gawk'의 함수는'gsub'입니다 : awk {gsub (/ <\/?l?ic> /, '', $ 0); print;} ''. 테스트되지 않은 코드. –

+0

앞에서 말씀 드렸듯이'sed '의 일부 버전은 추가 정규식 기능을 지원합니다. 최소한 GNU'sed'에서'\?'는 작동합니다 (또는'-r' :'?'). –

3

제거에만 태그 :

sed -i.old -r 's;</?l?ic>;;g' infile 
+0

+1 간결한 대답. 'sed 's | || g 'infile'도 작동하거나'sed'를 선호한다면 | 핀치에 || g''. – potong

+0

응답 해 주셔서 감사합니다! –

1

귀하의 태그는 오른쪽 대괄호 다음 마지막으로 오른쪽 대괄호하지 않은 문자의 수에 따라 왼쪽 브래킷의 구조를 가지고있다. 그럼 그런 식으로 쓸 수 :

sed 's/<[^>]*>//g' 
+0

응답 해 주셔서 감사합니다! –

2

sed은 복잡 할 필요가 없습니다. 당신이 원하는 것을하기위한 두 가지 간단한 방법이 있습니다.

이 그 정확한 패턴과 일치하고 전 세계적으로 제거합니다

sed -e "s%\(<lic>\|</lic>\|<ic>\|</ic>\)%%g" file.txt

기억, 당신이 필요한 경우 sed를 사용하여 여러 표현식을 설정할 수 있습니다 : 해당 태그 _Just_

sed -e "s%<lic>%%" -e "s%</lic>%%" -e "s%<ic>%%" -e "s%</ic>%%" file.txt

+0

또한,'-e'를'-i'로 변경하면,'file.txt'에 직접 그 변경 사항을 쓸 수 있습니다. – Steve

+1

또 다른 대안은'sed '% <\ (/ l \ |/\ | l \ | \) ic> %% g'file.txt' – potong

+0

응답 해 주셔서 감사합니다! –

관련 문제