
대규모 파일 세트의 두 설정 패턴 사이에 텍스트를 삽입해야 합니다.
다음 형식으로 각 행을 변경해야 합니다.
<a href="/entry/someFile">
이와 관련하여:
<a href="/entry/someFile.xhtml">
이 작업을 수행하기 위해 명령 을 작성하려고 노력했지만 sed
매우 어렵습니다.
href="/entry/
및 구분 기호를 사용해야 한다는 것을 알고 있지만 더 복잡한 텍스트 삽입/대체를 ">
사용하는 방법을 이해하지 못합니다 .sed
편집: 내 원래 게시물이 불분명하다는 것을 알고 있습니다. 상수 패턴은 href="/entry/
및 입니다 ">
. "someFile"은 어떤 파일 이름이라도 될 수 있습니다.
답변1
해결책 은 sed
이 답변에서 추가 내용을 참조하세요 .
노드가 올바른 형식의 XML 문서의 일부이고 기존 값이 다음으로 시작될 때 해당 레이블 값을 a
추가하려고 한다고 가정합니다..xhtml
href
/entry/
xml ed -u '//a[starts-with(@href, "/entry/")]/@href' \
-x 'concat(../@href,".xhtml")' file.xml >file-new.xml
이는 다음을 사용합니다.XML 스타(때로는 xmlstarlet
그냥 install 대신 으로 설치됨 xml
) 관련 노드를 찾아서 문서에 나타나는 위치에 관계없이 해당 속성 a
에 연결합니다 ..xhtml
href
결과는 여기에 새 파일로 저장되지만 xml ed --inplace ...
파일이 유효한지 확인한 후 해당 파일을 편집할 수 있습니다.
시험:
$ cat file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1"/>
<a href="/entry/someFile2"/>
<a href="/entry/someFile3"/>
</root>
$ xml ed -u '//a[starts-with(@href, "/entry/")]/@href' -x 'concat(../@href,".xhtml")' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>
사용하여 sed
(당신은아니요일반적으로 올바른 형식의 XML 파일에 사용됨):
sed 's|<a href="/entry/[^"]*|&.xhtml|g' file.xml
<a href="/entry/
이는 문자가 아닌 문자가 여러 개 오는 문자열과 일치합니다 "
(이것이 파일 이름이 됩니다). 그런 다음 일치하는 부분 전체를 자체 및 문자열로 바꿉니다 .xhtml
.
를 사용하면 sed -i
수정 사항이 적용됩니다.
테스트(위와 동일한 파일에서):
$ sed 's|<a href="/entry/[^"]*|&.xthml|g' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>
답변2
sed는 매우 복잡할 수 있지만 필요에 따라 사용하기 쉽습니다. 다음을 시도해 보세요.
sed -i 's/<a href=".*">/<a href="/some/link/">/g' yourfile.html
여기서 구문은 간단합니다.
sed -i 's/stringt before replacing/string after replacing/g'
와일드 .*
카드이며 무엇이든 일치할 수 있습니다. 필요할 때 사용하세요.
어쩌면 sed를 사용하기 전에 파일을 복사해야 할 수도 있습니다. 파일을 변경해도 -i
새 파일이 생성되지 않습니다.
-i [SUFFIX], --in-place[=SUFFIX] 파일을 제자리에서 편집(또는 SUFFIX가 제공되는 경우 백업)
마지막은 g
파일의 모든 일치 항목을 대체합니다.
파일의 첫 번째 항목만 변경하려면 다음을 사용하세요.
sed -i '0,/<a href=".*">/{s/<a href=".*">/<a href="/some/link/">/}' yourfile.html
동일한 구문:
sed -i '0,/string before/{s/string brefore/string after/}'