как поменять текст внутри файлов

Внутри моего файла мне нужно поменять местами всех экземпляров:

grep 'search string' 

а также

 sed '/string of text/,/string of text/{//!d}' 

В VI я пробовал регулярное выражение без везения – он говорит что-то о завершающих символах.

 :%s/grep 'search string'/sed '/string of text/,/string of text/{//!d}'/g 

Я также пытался с sed вне файла: который говорит, что событие не найдено

 sed -i 's/grep 'search string'/sed '/search string/,/search string/{//!d}'/g' filename. 

Что я делаю неправильно и как я могу заставить это работать? У меня слишком много случаев, которые мне нужно изменить, и сделать это вручную – это не вариант.

Я хочу изменить эту строку кода:

 succ_1st=`grep 'resulted in successful answer' $path_tmp/named.stats.tmp | sed '/localhost.localdomain/,/testdns.net/{//!d}' | awk '{ print $1 }' | grep -m1 ''` 

к этому:

 succ_1st=`sed '/localhost.localdomain/,/testdns.net/{//!d}' $path_tmp/named.stats.tmp | grep 'resulted in successful answer' | awk '{ print $1 }' | grep -m1 ''` 

Вот строки кода из скрипта BTW

2 Solutions collect form web for “как поменять текст внутри файлов”

Для вашего первого вопроса

Для того, чтобы эта команда работала, ограничитель изменений помогает. Кроме того, одиночные кавычки внутри команды sed должны быть надлежащим образом экранированы для защиты их от оболочки:

 sed 's|grep '\''search string'\''|sed '\''/search string/,/search string/{//!d}'\''|g' file 

Например, используя этот тестовый файл:

 $ cat file grep 'search string' 

Вышеупомянутая команда производит:

 $ sed 's|grep '\''search string'\''|sed '\''/search string/,/search string/{//!d}'\''|g' file sed '/search string/,/search string/{//!d}' 

Чтобы изменить файл на месте, добавьте флаг -i :

 sed -i 's|grep '\''search string'\''|sed '\''/search string/,/search string/{//!d}'\''|g' file 

Для вашего второго вопроса

 sed -r 's/(grep[^$]*)([$][^|]*)[|] (sed[^|]*)/\3\2| \1/' filename 

Например, рассмотрим этот тестовый файл:

 $ cat filename succ_1st=`grep 'resulted in successful answer' $path_tmp/named.stats.tmp | sed '/localhost.localdomain/,/testdns.net/{//!d}' | awk '{ print $1 }' | grep -m1 ''` 

Эта команда производит:

 $ sed -r 's/(grep[^$]*)([$][^|]*)[|] (sed[^|]*)/\3\2| \1/' filename succ_1st=`sed '/localhost.localdomain/,/testdns.net/{//!d}' $path_tmp/named.stats.tmp | grep 'resulted in successful answer' | awk '{ print $1 }' | grep -m1 ''` 

Чтобы изменить файл на месте, добавьте флаг -i :

 sed -ir 's/(grep[^$]*)([$][^|]*)[|] (sed[^|]*)/\3\2| \1/' filename 

Команды Vi

Первая команда выше может быть выполнена в vim с:

 %s/grep 'search string'/sed '\/search string\/,\/search string\/{\/\/!d}'/g 

Команда swap может быть выполнена внутри vim с помощью:

 %s/\v(grep[^$]*)([$][^|]*)[|] (sed[^|]*)/\3\2| \1/ 

Не sed, в основном bash:

 string=$(cat <<'END' succ_1st=`grep 'resulted in successful answer' $path_tmp/named.stats.tmp | sed '/localhost.localdomain/,/testdns.net/{//!d}' | awk '{ print $1 }' | grep -m1 ''` END ) var=$(cut -d'`' -f1 <<<"$string") code=$(cut -d'`' -f2 <<<"$string") IFS='|' read -ra commands <<<"$code" filename=$( set -f; eval set -- "${commands[0]}"; echo ${!#} ) # danger tmp=${commands[0]//${filename//\//\\\/}/} commands[0]="${commands[1]} $filename" commands[1]=$tmp printf -v new '%s`%s`' "$var" "$(IFS='|'; echo "${commands[*]}")" echo "$new" 
 succ_1st=` sed '/localhost.localdomain/,/testdns.net/{//!d}' $path_tmp/named.stats.tmp|grep 'resulted in successful answer' | awk '{ print $1 }' | grep -m1 ''` 
  • Как добавить строку в файл .txt во всех строках, исключая несколько символов с помощью sed или awk
  • Как использовать sed для изменения}, {"Foo" to} \ n {"Foo"?
  • Как я могу напечатать вторую в последнюю строку множество файлов в один файл?
  • проверка данных в столбцах, когда данные или некоторые могут отсутствовать или присутствовать?
  • Как использовать sed для замены строки, используя номер строки на удаленной машине, используя ssh?
  • Почему мои одиночные кавычки исчезают при подстановке с sed
  • Проблема удаления / замены специального символа °
  • Использовать переменную и новую строку в BSD sed?
  • awk + как добавить список в файл
  • Как печатать IP / MASK из списка?
  • Извлечение линий на основе условий
  • Linux и Unix - лучшая ОС в мире.