Как использовать Sed для замены символа подстановки пробелом - PullRequest
0 голосов
/ 17 февраля 2019

Итак, вот мой ввод:

list toblock '123
456'

Как я буду использовать sed для замены list toblock подстановочным знаком с пробелом для этого кода не работает

sed -i "s/list toblock '*.'/list maclist 'sampletoreplace'/g"

1 Ответ

0 голосов
/ 17 февраля 2019

Это .* вам нужно, а не *. (. означает любой символ, * означает повторение в любое время, включая 0 раз).
Также sed является редактором потока строки, поэтомупо умолчанию совпадение будет ограничено в пределах текущей строки.

Если вы хотите сопоставить несколько строк, самый простой способ - использовать -z switch (GNU sed):

echo "list toblock '123
456'"|sed -z "s/list toblock '.*'/list maclist 'sampletoreplace'/g"
list maclist 'sampletoreplace'

Но поскольку sed обычно работает с жадным режимом RegEx,и не поддерживает .*? (остановка жадного режима), поэтому вы можете изменить его на:

sed -z "s/list toblock '[^']*'/list maclist 'sampletoreplace'/g"

, в котором [^'] означает any character that is not a '.

...