sed를 사용하여 이 정규식을 빈 정규식으로 바꾸는 방법

sed를 사용하여 이 정규식을 빈 정규식으로 바꾸는 방법

성능상의 이유로 sed를 사용하여 파일의 일부 텍스트를 교체해야 하지만 제대로 작동하지 않습니다. 다음은 바꿀 검색 쿼리입니다(C#의 경우).

<oTimer.*?/>

첫째, 탈출할 수 없는 것 같습니다. / 제대로 이중 백슬래시와 함께 작은따옴표를 사용하고 있습니다.

<oTimer.*?\\/>

그러다가 이를 빈 문자열로 바꾸는 방법에 대한 문제에 부딪혔습니다.

sed 's/<oTimer.*?\\/g>

이 작업을 수행하지 않는 것 같습니다.

답변1

  • <oTimer.*?/>정규식인 경우 <oTimer/>something else <anothertag?>에도 일치합니다. 이것이 원하는 것인가? 어쩌면 당신은 HTML 파서를 찾고 있습니까?

  • 물음표가 확실합니까? 기본 정규 표현식에서는 특별한 의미가 없으므로 패턴은 (unusual)로 끝나야 합니다.?/>

  • 슬래시를 이스케이프하려면 백슬래시가 필요하지만 이 경우 s명령보다 다른 구분 기호를 사용하여 읽기가 더 쉽습니다(하나를 자유롭게 선택할 수 있습니다!).s_regex_replacement with /_

  • 빈 문자열로 바꾸려면 여전히 세 번째 구분 기호가 필요합니다(두 번째와 세 번째 구분 기호가 대체 문자열을 둘러싸므로 빈 대체의 경우 사이에 아무 것도 없는 두 개의 구분 기호가 있습니다).

  • 전반적으로, 나는 당신이 다음과 같은 것을 찾고 있다고 생각합니다.sed 's_<oTimer[^>]*/>__g'

답변2

첫째, sed욕심이 없는 수량자는 지원되지 않습니다 *?.

둘째, 대체 연산자의 구분 기호를 변경해야 합니다.

sed 's~<oTimer[^>]*/>~~g'

답변3

sed탐욕스럽지 않은 일치를 이해하지 못하므로 사용하지 마십시오 . 당신은 그것을 사용할 수 있습니다 perl:

perl -pe 's|<oTimer.*?/>||g' file.in > file.out

또는 해당 위치에서 파일을 편집합니다.

perl -i.bak -pe 's|<oTimer.*?/>||g' file.in

관련 정보