Как заменить символы <> на sed в сценарии cmd в Windows?Они интерпретируются как операторы перенаправления - PullRequest
0 голосов
/ 30 января 2019

Я хочу создать большой HTML-файл из множества маленьких HTML-файлов.Они используют только основные теги (h1-h4, p, br, hr, span), все они написаны вручную.Комментарии появляются только в 2 или 3 местах.

Что я хочу: я хочу заменить строку <!--css--> чем-то (например, qwerty), используя sed (cygwin).Пытаясь понять ошибку, я уменьшил команду до этого (записанного в файле .cmd):

sed.exe -i -r -z 's,<!--css-->,qwerty,g' outfile

(ничего не заменено)

sed.exe -i -r -z 's,\x3c!--css--\x3e,qwerty,g' outfile

(больше ничего не происходит)

sed.exe -i -r -z 's,!--css--,qwerty,g' outfile

(результат <qwerty> - но мне не нужны угловые скобки)

Параметры -r, -z, -e в любой комбинации не имеют значения

Я еще не знаком со * nix-скриптами, поэтому я не хотел бы туда идти.

PS: я использовал sed для многих других вещей, и он работал - он просто задыхался от угловых скобок (или Windows /cmd делает).

пример файла:

bla1 bla2

<!--css-->

bla3 bla4

Ответы [ 2 ]

0 голосов
/ 30 января 2019

@ Тив помог мне понять мерзость.Tnx;)

К сожалению, командная строка (независимо от ОС) не является опцией - не в моей текущей задаче.

Это НЕ работает:

sed.exe -i -r "s,<!--css-->,qwerty,g" outfile
sed.exe -i -r "s,^<!--css--^>,qwerty,g" outfile

Ноэтот делает:

sed.exe -i -r "s,<^!--css-->,qwerty,g" outfile

Также это:

sed.exe -i -r "s,^<^!--css--^>,qwerty,g" outfile

Таким образом, виновником был восклицательный знак!Невероятно!

Спасибо, люди.

0 голосов
/ 30 января 2019

С таким файлом:

$ cat file.txt
bla1 bla2

<!--css-->

bla3 bla4

В командной строке вы используете это:

> sed -r -z "s,<!--css-->,qwerty,g" file.txt
bla1 bla2

qwerty

bla3 bla4

Под Cygwin Bash вы используете это:

$ sed -r -z "s,<\!--css-->,qwerty,g" file.txt
bla1 bla2

qwerty

bla3 bla4

Неконечно, это будет работать на обоих:

sed -r -z "s,<\!--css-->,qwerty,g"

Кстати, вы можете просто -rzi (поставить i последним или это создаст резервные файлы), нет необходимости разделять их на GNUСЕПГ.И z не используется, я думаю.

При использовании одинарных кавычек ' в cmd вам нужно экранировать < и > с ^, например:

e:\tmp>sed -rz 's,^<\!--css--^>,qwerty,g' file.txt
bla1 bla2

qwerty

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