Из того, что я могу найти, когда вы используете одинарные кавычки, все внутри считается буквальным. Я хочу это для моей замены. Но я также хочу найти строку с одинарными или двойными кавычками.
Например,
sed -i 's/"https://www.fubar.com"/URL_FUBAR/g'
Я хочу заменить «https://www.fubar.com» на URL_FUBAR. Как sed должен распознавать мои // или мои двойные кавычки?
Спасибо за любую помощь!
EDIT: Могу ли я использовать s/\"http\:\/\/www\.fubar\.\com\"/URL_FUBAR/g
?
Действительно ли \ экранирует символы внутри одинарных кавычек?
Команда
s///
вsed
позволяет использовать другие символы вместо/
в качестве разделителя, как вor
Двойные кавычки не проблема. Для сопоставления одинарных кавычек поменяйте местами два типа кавычек. Обратите внимание, что строка в одинарных кавычках не может содержать одинарные кавычки (даже экранированные).
Точки должны быть экранированы, если
sed
должен интерпретировать их как буквальные точки, а не как шаблон регулярного выражения.
, который соответствует любому одному символу.отличный ответ dood, у меня просто есть быстрый вопрос. Как бы я сделал одинарные кавычки вместо своих двойных. В моем коде есть экземпляры, где он либо одинарный, либо двойной. Я могу просто запустить эту команду дважды, но каков синтаксис для экранирования одинарной кавычки? — person KRB; 22.09.2011
Экранирование одинарных кавычек у меня не сработало (bash на Mac), но сработало использование других типов кавычек для упаковки команды, чем заменяемая кавычка. например:
sed 's/"/bla/g'
для замены"
наbla
илиsed "s/'/bla/g" to replace
‘` наbla
— person KRB; 01.05.2018@rrr Строка в одинарных кавычках не может содержать встроенную одинарную кавычку. Изменение внешних кавычек (и экранирование любых специальных символов, интерпретация которых теперь может быть интересна оболочке) — один из способов решить эту проблему. Другой способ — вырваться из строки в одинарных кавычках и соединить строку с
"'"
(одинарная кавычка в двойных кавычках), прежде чем продолжить с остальной частью строки в одинарных кавычках, как в'you'"'"'d better do that'
. — person KRB; 21.03.2019Трудно избежать одинарной кавычки в одинарных кавычках. Попробуй это:
Пример:
производит
Вам нужно использовать \» для экранирования » символа (\ экранировать следующий символ
Может быть символ «\», попробуйте этот:
предложение дикой догадки не является решением. вместо этого вы можете добавить такие догадки в комментарии — или даже лучше — сначала попробуйте — person KRB; 14.01.2017
Моя проблема заключалась в том, что мне нужно было иметь
""
вне выражения, так как у меня есть динамическая переменная внутри самого выражения sed. Итак, фактическое решение заключается в том, что от Ленна Джекмана вы заменяете"
внутри регулярного выражения sed на[\"]
.Итак, мой полный удар:
Вот:
#
— разделитель sed[\"]
="
в регулярном выраженииvalue =
\"tags/$RELEASE_VERSION\"
= моя строка замены, важно, что она имеет только\"
для кавычекЧто касается одинарной кавычки, см. приведенный ниже код, используемый для замены строки
let's
наlet us
:команда:
результат:
Есть намного способ сделать это проще. Попробуйте:
echo "hello, let's go" | sed s/let\'s/let us/g
. На самом деле вам не обязательно указывать параметр дляsed
в одинарных кавычках. — person KRB; 27.05.2021Экранирование двойной кавычки может быть абсолютно необходимо в sed: например, если вы используете двойные кавычки во всем выражении sed (что вам нужно сделать, когда вы хотите использовать переменную оболочки).
Вот пример, который затрагивает экранирование в sed, но также фиксирует некоторые другие проблемы с цитированием в bash:
Предположим, вы хотите изменить комнату с помощью сценария sed, который вы можете использовать снова и снова, поэтому вы изменяете ввод следующим образом:
Этот сценарий добавит всю строку, если ее там нет, или просто заменит (используя sed) строку, которая там есть, текстом плюс значение $i.
P.S. Я написал приведенный выше сценарий в несколько строк, чтобы сделать комментарии разборчивыми, но я использую его как однострочный в командной строке, который выглядит следующим образом:
Кроме того: выражения sed, содержащие переменные BASH, должны быть заключены в двойные (
"
) кавычки, чтобы переменная интерпретировалась правильно.Если вы также заключаете свою переменную $BASH в двойные кавычки (рекомендуемая практика)
… тогда вы можете избежать двойных кавычек переменной, как показано:
То есть замените
"
, связанный с $VARIABLE, на""
.(Простое экранирование
"$VAR"
вместо\"$VAR\"
приводит к выходной строке с"
в кавычках.)Примеры
Здесь $VAR заключен в
"
перед передачей в sed (sed заключен либо в'
, либо в"
):Сравните это с:
… и так далее …
Заключение
Моя рекомендация, как стандартная практика, состоит в том, чтобы
"
-переменные BASH в кавычках ("$VAR"
)"
-кавычки, снова, эти переменные (""$VAR""
), если они используются в выражении sed (которое само должно быть заключено в"
, а не'
в кавычки)Ты можешь использовать %