1 개의 xml 파일을 교체했습니다. 그러나 나는 그들 중 10 개에서 test1.xml
to 까지 가 test30.xml
있고 끝에 다른 경로가 있습니다.
test1.xml
...
<examples>
<example path='/test/test123/st1.txt'/>
<examples>
...
test2.xml
...
<examples>
<example path='/test/test123/te2.txt'/>
<examples>
...
등등.
test30.xml
...
<examples>
<example path='/test/test123/removethispart.txt'/>
<examples>
...
출력 은 다음과 같아야합니다.
```
...
<examples>
<example path='/test/test123/'/>
<examples>
...
```
이전에는 이것을 사용했고 하나의 파일을 변경할 수 있습니다
sed -i "s#<example path='/test/test123/st1.txt'/>#<example path=/test/test123/>#" test1.xml
그러나 한 번에 여러 파일을 변경하고 아래 스크립트가 실행되었지만 cat
xml 파일에서 변경 사항이 표시되지 않았습니다.
sed -i "s#<example path='/test/test123/*.txt'/>#<example path='/test/test123/'>#" *.xml
어떤 도움이라도 대단히 감사하겠습니다. 시간 내 줘서 고마워!
문제의 원인은 정규식 패턴이 필요한 "shell glob"(일명 "와일드 카드") 패턴을 사용하기 때문입니다.
부분은 /test/test123/*.txt
실제로 " /test/test123
, 0 개 이상의 /
문자, 단일 문자, txt
" "를 의미합니다.
이 패턴은 원하는 것이 아니며 파일 어디에도 없습니다.
대신, 당신이 필요하다 /test/test123/[^.]*\.txt
"의미 /test/test123/
있는 문자의 수에 따라, 하지.
"다음에 (이 필요한 이유에 대한 욕심이 정규 표현식 참조) " 리터럴.
뒤에 txt
".
완전한 명령은 다음과 같습니다.
sed -i "s#<example path='/test/test123/[^.]*\.txt'/>#<example path='/test/test123/'>#" *.xml
노트
파일 이름 .
에 .txt
확장자 외에 포함될 수있는 경우 위의 내용이 제대로 작동하지 않습니다. 이 경우 사용
sed -i "s#<example path='/test/test123/.*\.txt'/>#<example path='/test/test123/'>#" *.xml
의미 " /test/test123/
, 0 개 이상의 모든 종류의 문자 .
, 리터럴 , txt
". .txt
패턴이 나중에 라인에서 다시 발생 하지 않는 한 올바르게 작동합니다 (입력에 해당되지 않아야 함).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다