Тут є два рівні тлумачення: оболонка і sed.
У оболонці все між одиничними цитатами інтерпретується буквально, крім самих одиничних лапок. Ви можете ефективно мати єдину цитату між окремими цитатами, написавши '\''
(закрити єдину цитату, одну буквальну єдину цитату, відкриту єдину цитату).
Sed використовує основні регулярні вирази . У BRE, для того, щоб їх було досліджено буквально, символів $.*[\^
потрібно процитувати, попередньо наклавши зворотну косу рису, за винятком внутрішніх наборів символів ( […]
). Букви, цифри і (){}+?|
не повинні бути укладені в лапки (ви можете піти з посиланням на деякі з них в деяких реалізаціях). Послідовності \(
, \)
, \n
, і в деяких реалізаціях \{
, \}
, \+
, \?
, \|
і інший зворотний слеш + буквено - цифрові мають особливе значення. Ви можете піти від того, щоб не вказувати $^
деякі позиції в деяких реалізаціях.
Крім того, вам знадобиться зворотна косої риси раніше, /
якщо вона буде відображатися в регулярному виразі поза дужками виразів. Ви можете вибрати альтернативний символ як роздільник, написавши, наприклад, s~/dir~/replacement~
або \~/dir~p
; вам знадобиться зворотний нахил перед роздільником, якщо ви хочете включити його в BRE. Якщо ви обрали персонажа, який має особливе значення у BRE, і ви хочете включити його буквально, вам знадобляться три зворотні риски; Я не рекомендую цього, оскільки це може поводитися по-різному в деяких реалізаціях.
Коротше кажучи, для sed 's/…/…/'
:
- Запишіть регулярні вирази між одиничними лапками.
- Використовуйте
'\''
для завершення з однією цитатою в регулярному виразі.
- Поставте зворотну косу рису перед
$.*/[\]^
та лише тими символами (але не всередині дужкових виразів). (Технічно ви не повинні ставити зворотну косу рису раніше, ]
але я не знаю про реалізацію, яка розглядає ]
і не \]
відрізняється від дужок виразів.)
- Всередині дужки вираз,
-
який потрібно досліджувати буквально, переконайтеся, що він перший чи останній ( [abc-]
або [-abc]
, ні [a-bc]
).
- Всередині виразного дужка, для того,
^
щоб досліджуватися буквально, переконайтесь, що він не перший (використовуйте [abc^]
, ні [^abc]
).
- Щоб включити
]
до списку символів, відповідних виразі дужки, зробіть його першим символом (або першим після ^
заперечним набором): []abc]
або [^]abc]
(ні, [abc]]
ні[abc\]]
).
У тексті заміни:
&
і їх \
потрібно цитувати, передуючи їх зворотній косою рисою, як це роблять роздільник (як правило /
) та нові рядки.
\
слідом за цифрою має особливе значення. \
Далі буква має особливе значення (спеціальні символи) у деяких реалізаціях, а \
за ними - інші символьні засоби \c
або c
залежно від реалізації.
- За допомогою одиничних лапок навколо аргументу (
sed 's/…/…/'
) використовуйте '\''
для додавання єдиної лапки в текст заміни.
Якщо шрифт або текст заміни надходить із змінної оболонки, пам’ятайте про це
- Режекс - BRE, а не буквальний рядок.
- У регулярному виразі новий рядок повинен бути виражений як
\n
(що ніколи не збігатиметься, якщо у вас немає іншого sed
коду, який додає символи нового рядка до простору шаблону). Але зауважте, що він не працюватиме в дужкових виразах з деякими sed
реалізаціями.
- У тексті заміни
&
, \
та нові рядки потрібно цитувати.
- Розмежувач потрібно вказати (але не всередині дужкових виразів).
- Використовуйте подвійні лапки для інтерполяції:
sed -e "s/$BRE/$REPL/"
.
function sedPath { path=$((echo $1|sed -r 's/([\$\.\*\/\[\\^])/\\\1/g'|sed 's/[]]/\[]]/g')>&1) } #Escape path for use with sed