2

Я пытаюсь удалить строку, начинающуюся с определенного слова в моем файле манифеста. Файл, содержащий строки, выглядит так:

<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" **publicKeyToken="1fc8b3b9a1e18e3b**"></assemblyIdentity>

Я хочу удалить publicKeyToken = "1fc8b3b9a1e18e3b" из него.

Я сделал: sed -e "s/publicKeyToken=\"[0-9]*[a-z]*\*//g" , но ничего не изменилось. Я не могу использовать publicKeyToken = "1fc8b3b9a1e18e3b" для замены, потому что содержимое между "" может измениться.

Кто-нибудь знает правильный способ сделать это?

2 ответа2

3

При использовании команды Sed вам нужно -i чтобы изменить файл. Без вас -i он напечатает на стандартный вывод, и вы можете проверить, будет ли команда работать на вас.

попробуйте sed -i "s/publicKeyToken=\"[0-9][a-z]*//g"

Также есть команда для удаления строки, начинающейся с чего-то. если вы хотите удалить строку publicKeyToken вы можете использовать

sed -i '/pattern to match/d' ./infile ie sed -i '/publicKey/d' yourfile.text Этот сайт имеет некоторую хорошую справку о том, что команды делают, помощь Sed

См. Также Ответ о переполнении стека для удаления строки

2

Я настоятельно рекомендую вам использовать регулярные выражения для управления XML. Существуют и другие инструменты, которые могут помочь вам лучше, чем sed , по крайней мере, в этом случае. Одним из таких инструментов является превосходный инструментарий XMLStarlet. Он доступен под Windows, Linux и MacOS.

Тем не менее, если вы по-прежнему хотели бы продолжать использовать sed , то я сразу вижу, что причиной проблемы является следующий бит: [0-9]*[a-z]* . Он соответствует только тексту, который начинается с нуля или более цифр, за которыми следуют ноль или более букв. То, что вам нужно, это [0-9a-f]{16} .

Взгляните на эти песочницы Regex. Они отлично подходят для проверки вашего регулярного выражения:

http://www.regexr.com/

http://www.rubular.com/

http://regexpal.com/


Всё ещё ищете ответ? Посмотрите другие вопросы с метками .