Linux — попытка заменить строку в PHP на SED

Я хочу заменить это:

<li><a href="autor.php?<?=$a?>">Autor</a></li>

чтобы:

<li><a href="autor.php?<?=$a?>">Autor</a></li><li><a href="QTY.php?<?=$a?>">QTY</a></li>

С этим кодом:

find www/ -type f -exec sed -i 's/\"\<li\>\<a href=\"autor.php\?\<\?\=\$a?\>\"\>Autor\<\/a\>\<\/li\>\"\/\"\<li\>\<a href=\"autor.php\?\<\?=\$a\?>\">Autor\<\/a\>\<\/li\>\<li\>\<a href=\"QTY.php\?\<\?=\$a\?\>\"\>QTY\<\/a\>\<\/li\>\"/g' {} \;

И я получаю эту ошибку:

sed: -e expression #1, char 211: unterminated `s' command

-1

Решение

Я думаю, что проблема в том, что вы избегаете «разделитель» (в первом случае /во втором случае - ) так что sed не интерпретирует это как следует. Попробуйте заменить промежуточный \- по - ,

2

Другие решения

Синтаксис для команды ‘s’:

s/foo/bar/

но у вас есть только два символа ‘/’ в строке, которые не экранированы.

Я бы порекомендовал вам перекомпоновать замену, используя другой разделитель. То есть Вы также можете использовать:

s-foo-bar-
0

find www/ -type f -exec \
sed -i '\#<li><a href="autor.php?<?=\$a?>">Autor</a></li># {
s##&<li><a href="QTY.php?<?=\$a?>">QTY</a></li>#
}' {} \;
  • Может быть один вкладыш, удалив {} в действии и \, Используйте это для ясность
  • использовать другой разделитель, чем / для простоты в действии sed, избегая экранирования этого персонажа (# Вот).
  • использовать сопоставление с образцом до s/// действие, но также может быть сделано непосредственно (также для ясности). Я использую s// Поведение для этого, где // значит, последнее исследуемое регулярное выражение, а также & внутри шаблона замены (найдено содержимое шаблона)
0

Просто используйте строковые операторы вместо регулярных выражений и «специального» шаблона замены sed:

$ cat file
foo<li><a href="autor.php?<?=$a?>">Autor</a></li>bar

$ awk -v tgt='<li><a href="autor.php?<?=$a?>">Autor</a></li>' \
-v add='<li><a href="QTY.php?<?=$a?>">QTY</a></li>' '
s=index($0,tgt) { $0 = substr($0,1,s+length(tgt)-1) add substr($0,s+length(tgt)) }
1' file
foo<li><a href="autor.php?<?=$a?>">Autor</a></li><li><a href="QTY.php?<?=$a?>">QTY</a></li>bar
0
По вопросам рекламы [email protected]