Как найти и заменить путь к файлу, указанному в файле

Вы можете передать данные напрямую в gzip, а затем перенаправить сжатые данные в файл:

echo "my not compacted data" | gzip > compact.gz
-1
14.01.2019, 10:58
3 ответа

Вы можете использовать:

sed -i -E -e 's/(\/.*\/)(.*\.idt)/\2/' file_list

Это выполняет замену в -месте(-i)всех /..../filename.idtпутей к файлам наfilename.idt(«все», как в :первое вхождение в каждой строке определенного файла ). Если перед именем файла нет абсолютного пути, регулярное выражение не совпадает и ничего не происходит. file_listможно заменить на *.xmlили подобное в командной строке. Вы можете сначала попробовать запустить команду без опции -i, чтобы увидеть вывод, прежде чем записывать его на диск.

2
28.01.2020, 05:07

Предполагая, что XML правильно сформирован, следующее удалит строку /test/src/repos/emp.deploy/из значений каждого узла File, содержащего эту строку, и строку .idtс помощью XMLStarlet (или, скорее, оставит бит значения, следующего за путем):

xmlstarlet ed -u '//File[contains(., "/test/src/repos/emp.deploy/") and contains(., ".idt")]' \
              -x 'substring-after(., "/test/src/repos/emp.deploy/")' file.xml

Добавление узла rootв ваш пример документа и выполнение приведенной выше команды генерирует

<?xml version="1.0"?>
<root>
  <Application Name="empBnf" ServiceType="SOAP" BitMode="32" Path="/test/bin"/>
  <FileList>
    <File>emptest1.idt</File>
    <File>emptest2.idt</File>
    <File>emptest3.idt
     </File>
    <File>/test/src/repos/emp.deploy/emptest.wsdl</File>
  </FileList>
  <Service Qualifier="http://www.mytest.com/test/empbnf" Name="/test/src/repos/empBnf" XManagement="Container">
    <Operation>Operation</Operation>
  </Service>
</root>

Было бы еще лучше, если бы работало следующее:

xmlstrlet ed -u '//File[contains(., ".idt")]' \
             -x 'replace(.,".*/","")' file.xml

... но XMLStarlet (в моей системе ), похоже, не хочет знать о функции replace().

2
28.01.2020, 05:07
I Have used below method

command: sed '/idt/s/\/test.*emp.deploy\///g' file

выход

sed '/idt/s/\/test.*emp.deploy\///g' file1
<Application Name="empBnf" ServiceType="SOAP" BitMode="32" Path="/test/bin"/>
<FileList>
    <File>emptest1.idt</File>
    <File>emptest2.idt</File>
    <File>
          emptest3.idt
     </File>
    <File>/test/src/repos/emp.deploy/emptest.wsdl</File>
</FileList>
<Service Qualifier="http://www.mytest.com/test/empbnf" Name="/test/src/repos/empBnf" XManagement="Container">
    <Operation>Operation</Operation>
</Service>
0
28.01.2020, 05:07

Теги

Похожие вопросы