вставить в середину строки в текстовом файле с помощью sed

Я изучаю, как добавить текст в строку в файле.

Итак, строка, которая у меня есть в текстовом файле, выглядит так

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.
0
18.09.2017, 20:22
2 ответа

Использование 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
1
28.01.2020, 02:45
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
0
28.01.2020, 02:45

Теги

Похожие вопросы