sed без регулярных выражений

sed без регулярных выражений

Я использую GNU SED для поиска и замены в больших файлах (до 2 ГБ).

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

Я не хочу обрабатывать параметры поиска или замены как регулярные выражения с помощью команды sed.

Я много экспериментировал, но каждый раз получал новые комбинации регулярных выражений, которые не работают для sed в виде обычного текста.

Как этого можно добиться?

Есть ли какая-то формула, позволяющая избежать специальных символов?

Примечание: я использую ~оператор в качестве разделителя команд вместо/

Ниже приведен пример

sed -ne "s~^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$~Replace" -ne "w output.txt" "input.txt"

Вышеприведенная команда не работает, так как она обрабатывает параметр find как регулярное выражение (так как это регулярное выражение). Поэтому, чтобы найти текст, мне нужно экранировать некоторые специальные символы в регулярном выражении, как показано ниже

sed -ne "s~\^\[-+\]?\[0-9\]\*\\.?\[0-9\]+(\[eE\]\[-+\]?\[0-9\]+)?\$~Replace" -ne "w output.txt" "input.txt"

В другом примере мне нужно изменить .*$на .\*\$ Но в (.*$) Я не хочу изменять входные данные.

Так существует ли универсальное правило для последовательности действий?

решение1

В:Есть ли какая-то формула, позволяющая избежать специальных символов?
В:Существует ли универсальное правило для последовательности действий?

А:Вы можете использовать соответствующий шестнадцатеричный код для специальных символов в случаях, когда просто набор /, ., *, ?, $и т. д. становится раздражающим. Например:

sed -rn '/\x22/p' file

выведет строки, содержащие двойные кавычки, поскольку \x22представляет ".

Если вам нужно найти шестнадцатеричные коды, вы можете легко сохранить их все в файл с помощью этой команды:

gawk 'BEGIN{for(i=0;i<255;i++){printf("%d\t%x\t%c\n", i,i,i)}}' null >chars.txt

Связанный контент