Как изменить слово в строке, в которой есть определенная строка - PullRequest
0 голосов
/ 10 июня 2018

Ubuntu 16.04

У меня есть XML-файл, содержащий около 50 строк кода.Есть определенная строка, которая содержит строку "FFFedrs".В этой строке находится слово true.

Если бы структура была аккуратной с одним пробелом между ними, вот так .. <property name="FFFedrs" value="true"/> <!-- Enables/Disables EasyMoney -->

Я мог бы использовать команду sed in place следующим образом:

$ cat file.xml

<property name="FFFedrs" value="true"/> <!-- Enables/Disables EasyMoney -->

$ sed -i 's/<property\ name=\"FFFedrs\"\ value=\"true\"\/>\ <!--\ Enables\/Disables\ EasyMoney\ -->/<property\ name=\"FFFedrs\"\ value=\"false\"\/>\ <!--\ Enables\/Disables\ EasyMoney\ -->/g' file.xml
$
$ cat file.xml

<property name="FFFedrs" value="false"/> <!-- Enables/Disables EasyMoney -->

Но файл не отформатирован аккуратно, поэтому строка со строкой "FFFedrs" выглядит примерно так ...

 <property name="FFFedrs"              value="true"/>       <!-- Enables/Disables EasyMoney -->

Как мне перевести true в false в строкекоторый имеет строку "FFFedrs"

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Это должно сработать

sed -i 's|\(<.*FFFedrs"\)\s*\(value.*>\)\s*\(<.*>\)|\1 \2 \3|' file

Я использую трубу в sed в качестве разделителя, потому что в вашей строке есть косые черты. 3 группы захвата для основных значений и вывод по желанию

Вы можете использовать https://regex101.com/, чтобы узнать о регулярных выражениях и проверить его вживую.

0 голосов
/ 10 июня 2018

Просто добавьте \+ после пробелов:

sed -i 's/<property\ \+name=\"FFFedrs\"\ \+value=\"true\"\/>/<property\ name=\"FFFedrs\"\ value=\"false\"\/>/g' file.xml

Это заменит несколько пробелов одним пробелом.

Если вы хотите сохранить пробелы:

sed -i 's/<property\(\ \+\)name=\"FFFedrs\"\(\ \+\)value=\"true\"\/>/<property\1name=\"FFFedrs\"\2value=\"false\"\/>/g' file.xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...