2016-11-11 2 views
0

У меня есть этот файл config.xmlсценария оболочки SED заменить

<widget id="com.example.hello" version="0.0.1"> 
<name>HelloWorld</name> 
<description> 
    A sample Apache Cordova application that responds to the deviceready event. 
</description> 
<author email="[email protected]" href="http://cordova.io"> 
    Apache Cordova Team 
</author> 
<enter>PASSWORD</enter> 
<content src="index.html" /> 
<access origin="*" /> 

Я пытался сделать это с СЕПГОМ без успеха.

мне нужно сделать, это:

$./script.sh config.xml NEWPASSWORD 

получить:

<widget id="com.example.hello" version="0.0.1"> 
<name>HelloWorld</name> 
<description> 
    A sample Apache Cordova application that responds to the deviceready event. 
</description> 
<author email="[email protected]" href="http://cordova.io"> 
    Apache Cordova Team 
</author> 
<enter>NEWPASSWORD</enter> 
<content src="index.html" /> 
<access origin="*" /> 

+0

Есть много примеров в Google, просто поиск 'sed заменить строку в файле' –

ответ

1

Использование обратной ссылки:

sed "s/^\(*<enter>\)\([^>]*\)</\1$2</" "$1" 
  • ^\(*<enter>\): поиск строк, начинающихся с любого количества пробелов, за которыми следует <enter>. Соответствующие символы захватываются скользящими скобками.

  • \([^>]*\)<: следующие символы вверху сверху < сняты во второй группе.

  • \1$2<: в строке подстановки, символы из первой группы выходов (\1), а затем второе значение параметра передается в сценарий, ($2, новое значение пароля)

Команда применяется к $1, файл передается в качестве первого параметра скрипту (имя файла).

Для редактирования файла в месте, используйте -i флаг:

sed -i "s/^\(*<enter>\)\([^>]*\)</\1$2</" "$1" 
+0

Это здорово, это работа! спасибо Kenavoz: PPP –

0

Хороший результат является:

$cat script.sh 

#!/bin/sh 
file=$1 
sed -i "s/^\(*<enter>\)\([^>]*\)</\1$2</" "$1" 

Тогда:

$./script.sh config.xml NEWPASSWORD 

Большое спасибо всем, особенно к Kenavoz.

Смежные вопросы