1

Я имею:

echo finally came. 34^"This is the account of | sed "s:[1-9][0-9]["]:<a name=\"top\">&</a>:g"

и мне нужно получить

finally came. <a name="top">34"</a>This is the account of

Я пробовал sed "s:[1-9][0-9][\"]:<a name=\"top\">&</a>:g" и "s:[1-9][0-9][^"]:<a name=\"top\">&</a>:g" без успеха

Как мне добиться этого в cmd с помощью sed. Я уже установил sed в Windows, но мне нужно набрать номера машин, которые имеют " на правой стороне».

2 ответа2

1

Я никогда не использовал sed в Windows, но, насколько я могу судить по вашему вопросу, экранирование, похоже, работает так же, как в * nix. Вы уже избегаете " в вашей замене, почему бы не сделать то же самое в самом шаблоне?

sed "s:[1-9][0-9]\":<a name=\"top\">&</a>:g"

Кроме того, исходя из предположения, что оболочка, с которой вы работаете, похожа на классические оболочки * nix, я бы использовал одинарные вместо двойных кавычек для выражения sed , что означает, что двойные кавычки не нужно экранировать:

sed 's:[1-9][0-9]":<a name="top">&</a>:g'
1

это делает это

gnuwin32 sed.

C:\Users\user>echo finally came. 34^"This is the account of | sed "s:[1-9][0-9 ][\"]:^<a name=\"top\"^>\0"</a>":g"
finally came. <a name="top">34"</a>This is the account of

C:\Users\ пользователь>

И если вы замените \0 на ^& это также работает, в приведенном выше примере Windows.

И вы можете заменить "</a>" на ^</a^> что тоже хорошо

для Cygwin

user@comp ~
$ echo наконец пришло. 34\"Это счет | sed" s:[1-9] [0-9] [\"]:\0:g" `

finally came. <a name="top">34"</a>This is the account of

и вы можете заменить \0 на & в приведенном выше примере Cygwin

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