Команды для работы с текстом
Команда покажет измененные и новые файлы за три дня
find /var/www/юзер/data/www/ -type f -mtime -3
Команда заменит всю строку которая начинается на include на include /usr/local/include/nginx/bots.conf;
find /home/admin/conf/web/ -type f -name "*.nginx.conf" -exec sed -i "/include/c\include \/usr\/local\/include\/nginx\/bots.conf;" {} \;
Команда скопирует файл /root/test.php в подкаталог data всех каталогов в /home/www
find /home/www/ -maxdepth 2 -name 'data' -print0 | xargs -0 -I {} cp -f /root/test.php {}
Манипуляции с текстом | |
---|---|
cat file | grep -i «Criteria» > result.txt |
общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в новый |
cat file | grep -i «Criteria» > > result.txt |
общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в существующий файл. Если файл не существует, он будет создан |
grep Aug /var/log/messages | из файла ‘/var/log/messages’ отобрать и вывести на стандартное устройство вывода строки, содержащие «Aug» |
grep ^ Aug /var/log/messages |
из файла ‘/var/log/messages’ отобрать и вывести на стандартное устройство вывода строки, начинающиеся на «Aug» |
grep [0-9] /var/log/messages | из файла ‘/var/log/messages’ отобрать и вывести на стандартное устройство вывода строки, содержащие цифры |
grep Aug -R /var/log/* | отобрать и вывести на стандартное устройство вывода строки, содержащие «Aug», во всех файлах, находящихся в директории /var/log и ниже |
sed ‘s/stringa1/stringa2/g’ example.txt | в файле example.txt заменить «string1» на «string2», результат вывести на стандартное устройство вывода. |
sed '/^$/ d’ example.txt |
удалить пустые строки из файла example.txt |
sed '/ *#/ d; /^$/ d’ example.txt |
удалить пустые строки и комментарии из файла example.txt |
echo ‘test’ | tr ‘[:lower:]’ ‘[:upper:]’ |
преобразовать символы из нижнего регистра в верхний |
sed -e ‘1d’ result.txt | удалить первую строку из файла example.txt |
sed -n ‘/string1/p’ | отобразить только строки содержашие «string1» |
sed -e ‘s/ *$/ / ‘ example.txt |
удалить пустые символы в в конце каждой строки |
sed -e ‘s/ string1/ / g’ example.txt |
удалить строку «string1» из текста не изменяя всего остального |
sed -n ‘1,8p;5q’ example.txt | взять из файла с первой по восьмую строки и из них вывести первые пять |
sed -n ‘5p;5q’ example.txt | вывести пятую строку |
sed -e ‘s/0*/0/g’ example.txt | заменить последовательность из любого количества нулей одним нулём |
cat -n file1 | пронумеровать строки при выводе содержимого файла |
cat example.txt | awk ‘NR%2==1’ |
при выводе содержимого файла, не выводить чётные строки файла |
echo a b c | awk ‘{print $1}’ |
вывести первую колонку. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции |
echo a b c | awk ‘{print $1,$3}’ |
вывести первую и треью колонки. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции |
paste file1 file2 | объединить содержимое file1 и file2 в виде таблицы: строка 1 из file1 = строка 1 колонка 1-n, строка 1 из file2 = строка 1 колонка n+1-m |
paste -d ‘+’ file1 file2 | объединить содержимое file1 и file2 в виде таблицы с разделителем «+» |
sort file1 file2 | отсортировать содержимое двух файлов |
sort file1 file2 | uniq |
отсортировать содержимое двух файлов, не отображая повторов |
sort file1 file2 | uniq -u |
отсортировать содержимое двух файлов, отображая только уникальные строки (строки, встречающиеся в обоих файлах, не выводятся на стандартное устройство вывода) |
sort file1 file2 | uniq -d |
отсортировать содержимое двух файлов, отображая только повторяющиеся строки |
comm -1 file1 file2 | сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file1’ |
comm -2 file1 file2 | сравнить содержимое двух файлов, не отображая строки принадлежащие файлу ‘file2’ |
comm -3 file1 file2 | сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах |
Преобразование наборов символов и файловых форматов | |
dos2unix filedos.txt fileunix.txt | конвертировать файл текстового формата из MSDOS в UNIX (разница в символах возврата коретки) |
unix2dos fileunix.txt filedos.txt | конвертировать файл текстового формата из UNIX в MSDOS (разница в символах возврата коретки) |
recode ..HTML < page.txt > page.html | конвертировать содержимое тестового файла page.txt в html-файл page.html |
recode -l | more |
вывести список доступных форматов |
grep -rl 'text' /var/www/ .
— ищем файлы, в которых имеется ‘text’
grep -rl 'text' ./ .
— то же, но в текущей категории..
Поиск и удаление файлов, содержащих строку
78.46.14.162
find /var/named/ -type f -exec grep "MX" {} ; -print | grep named
(имя файла и найденный текст)
find . -name '*.*htm*' -exec grep -i iframe {} ; -print | less
ищем iframe (файлы, перезаписанные вирусом).
Массовый поиск и замена в файлах:
sed -i~ "s/search text/replace text/g" index.php
i~ — флаг, указывающий на то, что оригинальный файл будет сохранен как file.ext~
g — заменяем не только первое вхождение
поиск и замена в нескольких файлах с использованием perl
perl -pi~ -e 's/foo/bar/' [files]
Поиск и замена с использованием sed (ищем скрипт и заменяем его на комментарий. Экранируем восклицательный знак:
sed -i.~ "s/≶script>var k;.*script>/≶\!-- deleted -->/g" index.php
Флаг -i (inplace) означает, что результат следует сделать в файле. При наличии символов после -i резервная копия сохраняется в соответствующий файл (некоторые системы не дают выполнить команду с флагом -i без сохранения резервной копии).
Для удобства дальнейшего удаления использую -i.~ (можно -i.bak — сохранит файлы, добавляя расширение bak). Дальнейшее удаление при помощи команды find + delete
find ./ -name '*.~' -delete
Просмотр файла, начиная со строки 532
more +532 file.txt
Массовое переименование файлов в linux — rename регулярка (/что заменять/на что заменять/ в каких файлах)
rename "s/.JPG/.jpg/g" *.JPG
Поиск файлов по размеру
Для удаления файлов, найденных командой find достаточно указать дополнительный параметр -delete
Поиск php файлов размером 535 байт (c — указывает на размер в байтах, по умолчанию — в блоках 512)
find ./ -type f -name '*.php' -size 599c
При указании размера со знаком плюс или минус — происходит поиск файлов соответственно больше или меньше указанного значения.
Поиск подстроки в недавно модифицированных файлах (40 дней):
find -name "*.php" -mtime -40 -exec grep "breadcrumb" {} \;
Поиск файлов find + последующий grep для них (find + exec grep).. во второй строчке — ещё и удаление
find ./ -type f -name '*.php' -size 599c -exec grep -l "c1120ba44a14664ed80cfa5a18832c1b9b39dec0" {} \;
find ./ -type f -size 599c -exec grep -l "c1120ba44a14664ed80cfa5a18832c1b9b39dec0" {} \; -delete
Поиск файлов больше мегабайта (+1M) меньше (-1M)
find ./ -type f -size +1M
Поиск файлов с нулевой длиной
find ./ -type f -size 0
Поиск и удаление файлов с нулевой длиной (вторым парамтером — путь к каталогу.. ./ означает текущий
find ./ -type f -size 0 -delete
Поиск номеров строк в файле (чтобы grep вывел номер строки — используем с параметром -n)
Чтобы вытащить определённые строки из файла (или удалить строки в начале файла и в конце файла), можно использовать sed — выведет строки с 4 по 17
sed -n '3,10p' file.txt
Переместить файлы размером >2Mb в каталог /tmp (и вообще выполнить любую команду с файлами)
find ./ -size +2M -exec cp {} /tmp \;
Ресайз всех изображений в каталоге, размер которых превышает 2М
find ./ -size +2M -exec convert {} -resize 1200x1200 {} \;
Ресайз всех изображений, по маске
find ./ -name '493_*' -exec convert {} -resize 1200x1200 {} \;
Рекурсивно удалить все .svn директории в подкаталогах
find . -name ".svn" -exec rm -rf {} \;
нумерует строки в файле file.txt
sed = file.txt | sed 'N;s/\n/\t/'
SED/AWK — Добавить в Начало Строки
Используйте следующие команды, чтобы добавить ПРЕФИКС
(какой-то текст или символ) в начало каждой строки ФАЙЛА
:
$ awk '{print "ПРЕФИКС"$0}' ФАЙЛ
— или —
$ sed 's/^/ПРЕФИКС/' ФАЙЛ
SED/AWK — Добавить в Конец Строки
Используйте следующие команды, чтобы добавить СУФФИКС
(какой-то текст или символ) в конец каждой строки ФАЙЛА
:
$ awk '{print $0"СУФФИКС"}' ФАЙЛ
— или —
sed 's/$/СУФФИКС/' ФАЙЛ
SED/AWK — Добавить в Начало и Конец
Используйте следующие команды, чтобы добавить какой-то ПРЕФИКС
в начало и какой-то СУФФИКС
в конец каждой строки ФАЙЛА
:
$ awk '{print "ПРЕФИКС"$0"СУФФИКС"}' ФАЙЛ
— или —
$ sed "s/.*/ПРЕФИКС&СУФФИКС/" ФАЙЛ
Насколько Строк в Одну, Разделенную Запятыми
Допустим у вас есть какой-то файл состоящий из нескольких строк.
И вам необходимо превратить эти несколько строк в одну строку, разделенную запятыми.
Есть множество способов достичь этого, но я чаще всего использую один из приведенных ниже.
Используйте одну из следующих команд, чтобы добавить по запятой в конце каждой строки файла, кроме последней, а затем превратить эти несколько строк в одну, разделенную запятыми:
$ echo $(awk 'NR > 1{print line", "}{line=$0;}END{print $0" "}' ФАЙЛ)
— или —
$ paste -d, -s ФАЙЛ
Пример:
$ cat file.txt Я Люблю Bash Я Люблю Bash Я Люблю Bash $ echo $(awk 'NR > 1{print line", "}{line=$0;}END{print $0" "}' file.txt) Я Люблю Bash, Я Люблю Bash, Я Люблю Bash $ paste -d, -s file.txt Я Люблю Bash,Я Люблю Bash,Я Люблю Bash
Автор: igel