1개의 xml 파일을 성공적으로 교체했습니다. 그러나 나는 test1.xml
에서 까지 10개의 경로를 갖고 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
어떤 도움이라도 대단히 감사하겠습니다. 시간 내 주셔서 감사합니다!
답변1
문제의 원인은 정규식 패턴이 예상되는 "쉘 글로브"(일명 "와일드카드") 패턴을 사용하고 있다는 것입니다.
이 부분은 /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
(입력한 경우에는 발생하지 않음).
답변2
sed -i "s#<example path='/test/test123/.*\.txt'/>#<example path='/test/test123/'>#" *.xml
이것은 내 문제를 해결했습니다. 모두를 응원합니다! :)