Необходимо поменять строку с другой строкой в файле с помощью bash-скрипта

#bash #apache #shell #awk

#bash #apache #оболочка #awk

Вопрос:

Мне нужно заменить ключевое слово другим ключевым словом / строкой в файле Linux. т.е

 IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml 
index.htm
</IfModule>
  

Здесь я хочу заменить или поменять местами index.html для index.php во 2-й строке или я хочу расставить приоритеты index.php вместо index.html и поместите index.html вместо index.php.

Я должен выполнить вышеупомянутую задачу с помощью скрипта оболочки, и для этого я уже пробовал команду:

 awk 'NR==2 { t = $2; $2 = $5; $5 = t; print; } ' abc.txt
  

Но это не сохраняется в файле, т. е abc.txt в котором я хочу изменить содержимое.

Пожалуйста, дайте мне знать, что я делаю не так.

Ответ №1:

Для любой команды cmd , чтобы обновить исходный файл:

 cmd file > tmp amp;amp; mv tmp file
  

Если вы используете GNU awk, вы могли бы вместо этого использовать awk -i inplace '...' file , и это сделает вышеуказанное для вас внутренне, точно так же, как это делают sed -i и perl -i и т.д.

Ответ №2:

Вы можете сделать это с помощью всего sed :

  sed -i.bak 's/index.html/index.php/g' abc.txt
  

Это заменит ВСЕ вхождения index.html на index.php в abc.txt и сохранит копию abc.txt исходного содержимого на abc.txt.bak .

Комментарии:

1. Ну, что он делает, так это заменяет просто inex.html как index.php и более поздние index.php все еще там. Итак, есть 2 index.php там

Ответ №3:

другой вариант — с помощью приведенной ниже команды perl :

 perl -pi -w -e 's/index.html/index.php/g;' abc.txt
  

Комментарии:

1. Я хочу поменять местами index.html с index.php пожалуйста, смотрите мой вопрос, я хочу index.php чтобы показать вместо index.html и index.html вместо index.php.