sed: как заменить указанную строку c - PullRequest
0 голосов
/ 09 июля 2020

У меня проблема, которую я пытаюсь решить с помощью sed. Моя цель - процитировать содержимое после content =, если содержимое еще не цитируется.

Вот конкретный пример:

<meta name="ProgId" content=Word.Document>
<meta name="Generator" content="Microsoft Word 15">

Я хотел бы добавить кавычки вокруг Word. так что в конце есть:

<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 15">

Я пытался с

sed -i 's@content="\(.*\)"@content="\1"/@g' "$1"

Однако это не работает.

Спасибо.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

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

sed -E 's/content=([^">]+)/content="\1"/'

Объяснение:

Таким образом, вы говорите sed заменить все после content= и до >, только если это не так. начать с ". Я использовал группировку регулярных выражений, чтобы заменить содержимое самим собой, окруженным ".

Вход:

<meta name="ProgId" content=Word.Document>
<meta name="Generator" content="Microsoft Word 15">

Выход:

<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 15">
1 голос
/ 09 июля 2020

Нет " во входных данных после content=, поэтому вы не должны сравнивать его. Вы можете сопоставить до пробела или >.

sed 's@content=\([^"][^ >]*\)@content="\1"@'

Обратите внимание, что вы должны использовать XML инструменты для анализа XML документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...