Я использую GNU SED для поиска и замены функциональности больших файлов (до 2 ГБ).
Символы поиска и замены могут содержать любые символы, поэтому я хочу, чтобы параметры поиска и замены обрабатывались как простой текст.
Я не хочу рассматривать или находить или заменять параметры как регулярное выражение с помощью команды sed.
Я много экспериментировал, но каждый раз получаю новые комбинации регулярных выражений, которые не работают для sed в виде простого текста.
Как этого достичь?
Есть ли какая-нибудь формула, чтобы избежать специальных символов?
Примечание: я использую оператор ~
как разделитель команд вместо /
Ниже приведен пример
sed -ne "s~^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$~Replace" -ne "w output.txt" "input.txt"
Вышеуказанная команда не работает, так как она обрабатывает параметр поиска как регулярное выражение (как и регулярное выражение). Следовательно, чтобы найти текст, мне нужно экранировать некоторые специальные символы в регулярном выражении, как показано ниже
sed -ne "s~\^\[-+\]?\[0-9\]\*\\.?\[0-9\]+(\[eE\]\[-+\]?\[0-9\]+)?\$~Replace" -ne "w output.txt" "input.txt"
В другом примере я должен изменить .*$
Для .\*\$
Но в (.*$)
Я не хочу вводить данные.
Так есть ли универсальное правило для escape-последовательности?