Вернуться назад

Команды для работы с текстом

Команда покажет измененные и новые файлы за три дня


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
Дата: 24 января 2019 г. в 18:11:47

Автор: igel