md 파일(일반 텍스트)에서 찾아서 바꿔야 합니다.
<span class="symbol"></span>
이것으로:
[]{custom-style="symbol"}
여러번 시도했는데 아무것도 안됐어요
sed -i -e 's/\(<span class=\"symbol\">\)\(<\/span>\)/\[/\]/\{custom-style=\"symbol\"\}/g'myfile.md
또는
sed -i -e "s#<span class=\"symbol\"></span>#[]{custom-style=\"symbol\"}#g" "Dignità umana e bioetica".md
하지만 항상 다음과 같은 오류 메시지가 나타납니다.
sed: -e expression #1, char 40: unknown option to `s'
이것작동하는 것 같습니다(오류 메시지 없음).
sed -i -e "s@<span class=\"symbol\"></span>@[]{custom-style=\"symbol\"}@g" myfile.md
그런데 난 이 코드를 받았어
[<span class="symbol"></span>#58771;]{custom-style="symbol"}
새로운 문자열은다음에 추가, 이전 것을 교체하지 마십시오.
해결됨
말씀하신 대로 이 명령은 작동합니다.
sed -i -e 's@<span class="symbol">\<\/span>@[\]{custom-style="symbol"}@g'
답변1
이것은 작동합니다:
sed -i -e "s@<span class=\"symbol\"></span>@[\]{custom-style=\"symbol\"}@g" myfile.md
\
대체 텍스트가 특별하기 때문에 그 전에 사용해야 &
제대로 작동합니다 &
. 이는 "패턴과 일치하는 입력의 전체 부분"을 의미합니다.
에서 man sed
:
s/정규식/교체/
대체 항목에는 패턴 공간의 일치하는 부분을 나타내는 특수 문자 &와 정규식에서 일치하는 해당 하위 표현식을 나타내는 특수 이스케이프 문자 \1~\9가 포함될 수 있습니다.
답변2
이게 나한테는 효과가 있는 것 같아
# echo '<span class="symbol"></span>' > test
# sed -i -e 's@<span class="symbol">\<\/span>@[\]{custom-
style="symbol"}@g' test
# cat test
[]{custom-style="symbol"}
답변3
awk를 사용하세요
echo "<span class="symbol"></span>" |awk -F'=|>|<' 'BEGIN { OFS=""; }{ print "["$4"]","{cumtom-style=""\""$3"\"""}"}'
[]{cumtom-style="symbol"}
답변4
시도 중인 코드에 몇 가지 문제가 있습니다.
첫째, 텍스트에 존재하지 않는 문자를 명령의 구분 기호로 선택하면 작업이 더 쉬워집니다 s///
. 또는 \
텍스트에 나타나는 구분 기호를 사용하여 이스케이프해야 합니다.
첫 번째 명령에서,
sed -i -e 's/\(<span class=\"symbol\">\)\(<\/span>\)/\[/\]/\{custom-style=\"symbol\"\}/g'myfile.md
발생한 오류는 이스케이프되지 않은 /
in 으로 인해 발생합니다.[/\]
&
또한 리터럴을 출력 텍스트 에 넣으려면 \
대체 표현식에서 a를 사용하여 이스케이프해야 합니다. 그렇지 않으면 &
특수한 것으로 해석되고 패턴 공간의 일치하는 부분으로 대체됩니다.
단순화를 위해 여기 /
에서 불필요한 이스케이프 문자(아마도?)와 불필요한 이스케이프 문자 몇 개(아마도?)를 제거했습니다 [/\]/\{custom-style=\"symbol\"\}
. 또한 명령은 입력 텍스트에 표시되지 않으므로 |
명령의 구분 기호로 선택했습니다 . s///
명령은 다음과 같습니다.
sed -e 's|<span class="symbol"></span>|[\]{custom-style="symbol"}|g'
이것이 하는 일입니다:
$ echo '<span class="symbol"></span>' | sed -e 's|<span class="symbol"></span>|[\]{custom-style="symbol"}|g'
[]{custom-style="symbol"}
문자열이 정적이 아니고 해당 값에 관계없이 with 및 주변의 
를 바꾸려는 경우 캡처 그룹( ) 및 역참조(여기 ) 를 사용할 수 있습니다 .<span class="symbol">
[
</span>
]{custom-style="symbol"}
()
\1
sed -e 's|<span class="symbol">\(.*\)</span>|[\1]{custom-style="symbol"}|g'
이 명령의 기능은 다음과 같습니다.
$ echo '<span class="symbol">whatever is here</span>' | sed -e 's|<span class="symbol">\(.*\)</span>|[\1]{custom-style="symbol"}|g'
[whatever is here]{custom-style="symbol"}
마지막으로 스크립트 주위에 큰따옴표( '
) 대신 작은따옴표( "
) 를 사용하여 sed
셸에서 스크립트를 보호하는 것을 선호할 수도 있습니다 $
. 매개변수 확장, 이스케이프에 의해 트리거됩니다 \
.