Как упомянул @SHW, вопрос на самом деле касается выполнения программы python в сценарии оболочки (без запуска сценария python напрямую с помощью./disk.py
)
Таким образом, расширяя ответ @SHW, ваш сценарий оболочки должен выглядеть примерно так:
#!/bin/bash
/usr/bin/python /absolute/path/to/your/disk.py
Обратите внимание на /usr/bin/python
вместо просто python
; использование абсолютных путей помогает сценарию точно знать, какой python использовать (, чтобы найти абсолютный путь к вашему установленному python usewhich python
).
Та же история с использованием абсолютных путей в скрипте Python вместо простого disk.py
. В моем случае я пытался запустить приложение Django из своего сценария bash, поэтому мне пришлось добавить абсолютный путь к моему manage.py
, чтобы оно работало правильно.
Кроме того, что касается заголовка вашего bash-скрипта, есть несколько альтернатив #!/bin/bash
. Пожалуйста, взгляните на этот вопрос, чтобы узнать больше об этом.
Удачи.
Возможно, это не самое элегантное решение, но оно работает:
sed 's/\(<\/Data>\)/\1\n/ig'
sed '/<\/Data>/ a \\n'
будет вставлять новую строку, однако, если строка существует более одного раза в строке (типичный xml может быть одной длинной строкой )он просто добавляет новую строку после нее, а не после каждого вхождения.
Если вам действительно нужна новая строка после каждого вхождения, sed 's/\(<\/Data>\)/\1\n/g'
должно помочь.
Вместо того, чтобы просто форматировать тег Data
, вы можете отформатировать весь файл XML с новыми строками после каждого узла XML. Это правильное решение.
Использование sed не элегантно, не универсально и не является правильным решением.
Подумайте о разделеCDATA
внутри вашего XML с помощью:
<![CDATA[foobar</Data>qux]]>
Вместо этого можно использовать синтаксический анализатор XML, например xmlstarlet:
xmlstarlet format -R file.xml
Пример:
cat file.xml
<foo>
<a>jkj</a><data>fghj</data><x>w</x>
</foo>
$ xmlstarlet fo -R file
<?xml version="1.0"?>
<foo>
<a>jkj</a>
<data>fghj</data>
<x>w</x>
</foo>
sed 's:</Data>:&\
:g'
Или при вызове sed из bash или другой оболочки, поддерживающей $'\<char>'
, для расширения управляющей последовательности:
sed 's:</Data>:&\'$'\n'':g'
Или с GNUsed
:
sed 's:</Data>:&\n:g'
напр.:
$ printf 'foo</Data>bar</Data>etc\n'
foo</Data>bar</Data>etc
$
$ printf 'foo</Data>bar</Data>etc\n' | sed 's:</Data>:&\n:g'
foo</Data>
bar</Data>
etc
Пробовал на питоне
cat inputfile
san</Data>abhi</Data>san
Питон
#!/usr/bin/python
g="</Data>"
import re
k=open('k.txt','r')
for i in k:
m="{0}".format(g+"\n")
q=re.sub(g,"{0}",i).format(m)
print q
выход
san</Data>
abhi</Data>
san