다음 상황 후에 공백을 추가하고 싶습니다.
<span class="negrita">ANYTHING</span>
따라서 다음 SED 명령어를 사용하세요.
sed -E "s/(<span class=\"negrita\">.*?<\/span>)/\1 /g" <<< 'In <span class="negrita">1959</span> economic policy was reoriented in order to undertake <span class="negrita">the country modernization</span>. More text'
나는 다음과 같은 결과를 얻습니다.
In <span class="negrita">1959</span> economic policy was reoriented in order to undertake <span class="negrita">the country modernization</span> . More text
따라서 보시다시피 첫 번째 발생 이후가 아니라 마지막 발생 이후에 공백이 추가됩니다. "/g" 옵션은 모든 항목을 대체해야 한다는 의미가 아닙니까?
미리 감사드립니다.
답변1
*?
표준 확장 정규식 연산자가 아닙니다.
sed
또는 regexp 엔진의 구현 에 따라
- BSD와 같은 오류 보고
- GNU 시스템과
.*
동일합니다.(.*)?
perl
ast- open 처럼 작동하는*?
탐욕스럽지 않은 버전*
sed
- 표준 연산자가 아니기 때문에 무엇이든 또는 모든 작업을 수행합니다.
당신은 그것을 원하는 것 같지만 3
그것을 얻고 있는 것 같습니다 2
. 아마도 당신 sed
이 GNU이기 때문일 것입니다 sed
.
이는 -E
표준 옵션도 아닙니다 sed
(POSIX 사양의 다음 주요 버전에 나타날 수도 있음).
perl
정규식 연산자를 사용하려면 다음을 사용해야 합니다 perl
.
perl -pe 's:<span class="negrita">.*?</span>:$& :g'
(가정기간s는 중첩되거나 줄로 분할되지 않습니다)
또는 를 사용하여 sed
다음을 수행할 수 있습니다(범위의 콘텐츠에 가 포함되어 있지 않다고 가정 <
).
sed 's:<span class="negrita">[^<]*</span>:& :g'
답변2
노력하다
sed -E "s/(<span class=\"negrita\">[^<]*?<\/span>)/\1 /g"
어디
[^<]
모든 문자를 나타내지만<
귀하의 예를 사용하여 (추가됨 ===
)
sed -E "s/(<span class=\"negrita\">[^<]*?<\/span>)/\1=== /g"
제공됨(수동으로 접힘)
In <span class="negrita">1959</span>=== economic policy
was reoriented in order to undertake <span class="negrita">the
country modernization</span>=== . More text