성능상의 이유로 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