Рассмотрим варианты, когда в командной строке Linux для всех строчек в файле нужно добавить строку в начало, в конец или сразу в начало и конец.
К примеру, нужно добавить в файл .htaccess тысячи IP адресов для блокировки, которые содержатся в текстовом файле, для этого перед ними нужно добавить строку «Require not ip » или «Deny from » (в зависимости от версии сервера, подробнее смотрите «Контроль доступа к сайту (блокировка по IP, User-Agent)»).
Предположим, наш список IP адресов для блокировки содержится в файле hola.ip:
Чтобы добавить перед каждой строкой «Require not ip » достаточно выполнить команду:
sed 's/^/Require not ip /' hola.ip
Это только один из многочисленных примеров, когда на практике может понадобиться добавлять строки до или после текста.
В последующих командах:
- ПРЕФИКС — означает текст, вставляемый перед каждой строчкой
-
СУФФИКС — означает текст, вставляемый в конце каждой строчки
ФАЙЛ.txt — файл, из которого будут считываться строки для изменения
Как обычно в Linux, любое действие можно выполнить множеством способов даже с помощью одной команды, поэтому для каждого случая будет показано несколько способов.
Обратите внимание, что начальный файл меняться не будет, а новые значения строк будут выведены в стандартный вывод. Если к любой из последующих команд с sed и perl добавить опцию -i, то изменения будут сделаны в исходном файле вместо вывода результатов в стандартный вывод. Например:
sed -i 's/^/ПРЕФИКС/' hola.ip.bac awk -i '{ print "ПРЕФИКС" $0 }' hola.ip.bac
Как добавить строку в начало каждой строчки
С помощью sed (любая из команд):
sed 's/^/ПРЕФИКС/' ФАЙЛ.txt sed -e 's/^\(.*\)$/ПРЕФИКС\1/' ФАЙЛ.txt sed 's/.*/ПРЕФИКС&/' ФАЙЛ.txt
С помощью awk:
awk '{ print "ПРЕФИКС" $0 }' ФАЙЛ.txt
С помощью perl (любая из команд):
perl -lne 'print "ПРЕФИКС$_"' ФАЙЛ.txt perl -pe 's/^/ПРЕФИКС/' ФАЙЛ.txt perl -lpe '$_="ПРЕФИКС$_"' ФАЙЛ.txt
Как добавить строку в конец каждой строчки
С помощью sed (любая из команд):
sed 's/$/СУФФИКС/' ФАЙЛ.txt sed -e 's/^\(.*\)$/\1СУФФИКС/' ФАЙЛ.txt sed 's/.*/&СУФФИКС/' ФАЙЛ.txt
С помощью awk:
awk '{ print $0 "СУФФИКС" }' ФАЙЛ.txt
С помощью perl (любая из команд):
perl -lne 'print "$_СУФФИКС"' ФАЙЛ.txt perl -pe 's/$/СУФФИКС/' ФАЙЛ.txt perl -lpe '$_="$_СУФФИКС"' ФАЙЛ.txt
Как добавить строку в начало и в конец каждой строчки
С помощью sed (любая из команд):
sed 's/^/ПРЕФИКС/; s/$/СУФФИКС/' ФАЙЛ.txt sed -e 's/^\(.*\)$/ПРЕФИКС\1СУФФИКС/' ФАЙЛ.txt sed 's/.*/ПРЕФИКС&СУФФИКС/' ФАЙЛ.txt
С помощью awk:
awk '{ print "ПРЕФИКС" $0 "СУФФИКС" }' ФАЙЛ.txt
С помощью perl (любая из команд):
perl -lne 'print "ПРЕФИКС$_СУФФИКС"' ФАЙЛ.txt perl -pe 's/^/ПРЕФИКС/; s/$/СУФФИКС/' ФАЙЛ.txt perl -lpe '$_="ПРЕФИКС$_СУФФИКС"' ФАЙЛ.txt
Связанные статьи:
- Как добавить нули до определённого размера строки (92.2%)
- Как сделать замену от совпадения до конца строки (89.6%)
- Как отфильтровать текст, находящийся между двумя определёнными строками (83.4%)
- Как удалить newline (символ новой строки) из вывода команд и файлов в командной строке Linux (74.4%)
- Как преобразовать строку в нижний регистр в Bash (74.4%)
- Основы использования Joe's Own Editor (RANDOM - 19.4%)