가정을 쓸 수 없습니다 의심 : 생산하는
sed "s/<bean:write name=[\'\"]\?iframesrcUrl[\'\"]\?\/>/\${ iframesrcUrl }/g; \
s/<bean:write name=[\'\"]\?currentPage[\'\"]\?.*\/>/\${ currentPage.title }/g;" \
input.xml
:
<root>
${ iframesrcUrl }
${ iframesrcUrl }
${ currentPage.title }
<foo><bar/></foo>
</root>
필요한 것은 무엇입니까? 또는 속성 값을 대체 하시겠습니까? 아니면이 태그에 대체 텍스트를 넣으시겠습니까? 찾아 자리에서 모든 파일을 편집하려면
(!주의는 파일, 사용하기 전에 -i
없이 테스트 해 '* .jsp로'대신 파일 마스크를 넣어 변경) :
find . -type f -name '*.jsp' -print0 | xargs -0 sed -i "..."
UPDATE를
파일 자체가 아닌 속성 값을 바꾸려면 sed
/awk
대신 xmlstarlet
을 사용하는 것이 좋습니다. 그것은 훨씬 더 신뢰성 있고 유연합니다. xmlstarlet
프로세스에 대한 완전한 (유효) 파일을 필요로하기 때문에, 당신의 경우에 정확히 솔루션을 게시 할 수 없습니다,하지만이 아이디어입니다 :
<a>
<b>
<c name="foo"/>
<c name="bar"/>
</b>
</a>
하자 우리가 SPAM
와 foo
교체 싶은 말 :
파일을 감안할 때 및 bar
과 EGGS
.
$ printf '<a><b><c name="foo"/><c name="bar"/></b></a>' | \
xmlstarlet ed --update "//c[@name='foo']/@name" -v SPAM \
--update "//c[@name='bar']/@name" -v EGGS
<?xml version="1.0"?>
<a>
<b>
<c name="SPAM"/>
<c name="EGGS"/>
</b>
</a>
I 그것이 어떤 c
태그에 속하는 foo
같다 name
속성 첫 번째 경우 (대체 된 요소를 선택하는 구문 XPath를 사용 : 다음 명령은 (가독성을위한 스플릿 선)을 수행 할). ed
부속 명령 xmlstarlet
은 다양한 변환을 허용하며 요소를 대체 (업데이트)하는 것은 그 중 하나입니다.
실제의 예에서 당신은 즉,도 bean
작업 공간을 지정 xmlstarlet
의 옵션 목록에
-N bean=urn:...
같은 것을 추가해야합니다. .jsp 파일의 첫 번째 줄에서 정확한 URI를 찾을 수 있습니다 (나는 볼 필요가 없습니다).
감사합니다. 커맨드 라인에서 큰 따옴표와 큰 따옴표를 일치시키는 것이 꽤 어렵다는 것을 알았습니다. 그러나 두 표현을 사용하고 sed에 둘 다주는 방법으로 해결할 수 있습니다. –