Как заменить адрес электронной почты в файле (PHP )из командной строки без sed?

xdgmenumaker на github — лучший выбор, чтобы делать именно то, что вы хотите. Он будет автоматически создавать полное меню на основе файлов.desktop и автоматически обновлять его каждый раз, когда вы его открываете.

0
14.03.2021, 08:41
2 ответа

Вы можете использовать утилиту awk , которая просматривает строки с точки зрения полей, разделенных разделителями, которые вы установили в командной строке с опцией -F.

read new_email_address
awk -F '"' -v new="$new_email_address" '
  $1 == "$to = " {$2 = new}
1' OFS='"' your_phpfile

awk -v q=\" -v new="$new_email_address" '
BEGIN {
  new_esc = new
  gsub(/[&]/, "\\\\&", new_esc)
  repl = q new_esc q";"
}
sub(\
    /\$to = ".*";$/, \
     "$to = " repl   \
)+1' your_phpfile
1
18.03.2021, 22:25

Переменные оболочки в кавычках будут раскрыты только в том случае, если их внешний уровень кавычек является двойной кавычкой. Для иллюстрации:

$ var=foo
$ echo '"$var"'
"$var"
$ echo "'$var'"
'foo'

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

Следующая проблема заключается в том, что ваше регулярное выражение неверно. $в регулярном выражении означает «конец строки», поэтому у вас не может быть несколько $в таком виде. Я действительно не понимаю, что вы пытаетесь сделать с этим регулярным выражением, поэтому я просто предполагаю, что вы хотите изменить адрес электронной почты, найденный после строки $to =. Если да, попробуйте это:

sed -i "s/\\$to = \"[^\"]*\"/\\$to = $new_email_address/" FILE

Мне нужно экранировать"(\"$(\$to), чтобы $toне читалась как переменная, и поэтому внутренний "не закрывает отверстие ". Я также должен добавить еще один уровень побега (\\$), чтобы $не был виден оболочке и вместо этого передавался sed. И да, я понимаю, что это смехотворно сложно.

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

sed 's/\$to = "[^"]*"/$to = '"$new_email_address"'/' FILE
2
18.03.2021, 22:25

Теги

Похожие вопросы