Я изучаю, как добавить текст в строку в файле.
Итак, строка, которая у меня есть в текстовом файле, выглядит так
hosts allow = 192.168.122. 172.24.0
Я хочу добавить IP, чтобы строка выглядела как
hosts allow = 192.168.122. 192.12.0. 172.24.0
Путем проб и ошибок у меня есть только:
sed -i '/allow/ s/.*/&,192.12.0./' testfile
, что дает:
hosts allow = 192.168.122. 172.24.0. 192.12.0.
Использование awk
для вставки строки в качестве предпоследнего поля в строке:
$ awk '/allow/ { $(NF+1) = $NF; $(NF-1) = "192.12.0." } { print }' file
hosts allow = 192.168.122. 192.12.0. 172.24.0
Первый блок будет выполнен для любой строки в file
, содержащей строку allow
. Сначала будет перемещено последнее поле, $NF
, на один шаг дальше, к $(NF+1)
. Это увеличивает NF
на единицу. Затем он присваивает строку предпоследнему полю, $(NF-1)
.
Затем печатаются все строки.
Перенаправить вывод из этого в новый файл и переместить этот файл на место:
awk...as above... file >file.new && mv file.new file
sed 's/= [^ ]*/& 192.12.0/'
Захватывает знак =
, пробел и все символы перед следующим пробелом. То есть эта часть = 192.168.122.
. Затем заменяет все совпадающие символы на себя -&
(, то есть не меняет эту часть, просто возвращает ее обратно ), плюс добавляет нужный ip 192.12.0
.
Вход
hosts allow = 192.168.122. 172.24.0
Выход
hosts allow = 192.168.122. 192.12.0 172.24.0