#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.