저는 정규식을 처음 접했고 정규식을 사용하여 markdown(maardown의 사용자 정의/제작 형식)을 html로 변환하는 것이 시작하는 좋은 방법이라고 생각했습니다. Vim(8.1)에서는 다음 줄을 변환하라는 메시지가 표시됩니다.
+style
#include <style.css>
-style
도착하다;
<link rel="stylesheet" type="text/css" href="style.css">
저는 Vim에서 이 명령을 사용했습니다.
:%s/^+style$\n\(.*\)$\n^-style/<link rel="stylesheet" type="text\/css" href="\1">/g
나는 내가 원하는 것을 얻었습니다. 그러나 GNU sed를 사용하여 터미널에서 동일한 명령을 실행하면 출력에 변화가 없습니다.
sed 's/^+style$\n\(.*\)$\n^-style/<link rel="stylesheet" type="text\/css" href="\1">/g'
또한 -z
플래그를 포함하는 것은 별로 도움이 되지 않는 것 같습니다. 출력은 입력과 동일하게 유지됩니다.
이유를 모르겠습니다.
답변1
질문에 표시된 대로 명령은 줄 중심 편집기이므로 sed
입력에서 개행을 전혀 볼 수 없습니다 . 데이터는 실제 개행 문자가 제거된 상태로 한 번에 한 줄씩 sed
표시됩니다 .sed
-z
GNU를 사용하여 추가하면 sed
유틸리티에서 \0
구분 기호로 nul( )을 사용하게 됩니다. 이것은 당신이 이제 얻을 것을 의미합니다모두문서를 즉시 sed
편집 버퍼에 넣고 사용할 수 있습니다 \n
. 그러나 이는 시작과 끝도 일치하지 않음을 ^
의미 합니다.$
철사더이상.
개인적으로 나는 표준 sed
명령을 사용합니다
sed '/^+style$/,/^-style$/ s|^#include.*|<link rel="stylesheet" type="text/css" href="style.css">|' file
이는 수행하려는 작업과 다른 세 가지 작업을 수행합니다.
/^+style$/,/^-style$/
이는 명령이 영향을 미치는 행을 지정하기 위해 주소 범위를 사용합니다s///
.이 범위 내에서 대체 명령은
#include
줄의 시작 부분에서 일치합니다.바꾸기 명령은 패턴 및/또는 대체 텍스트가 이스케이프 없이 포함될 수 있도록
|
일반적인 구분 기호 대신 구분 기호를 사용하여 작성 됩니다. 이는 가독성에 도움이 됩니다./
/
(또한 그렇지 않습니다.필요하다그누 sed
. )
/
수정된 명령은 Vim에서도 사용할 수 있지만 Vim에서 명령을 구분하는 용도 로 사용해야 합니다 s///
. 편집자는 ed
동일한 명령을 사용할 수 있습니다 sed
.