Главная command_0 Текст и файлы

Текст и файлы

Поиск в консоли в текстовых документах по содержимому

install catdoc antiword odt2txt poppler-utils xls2csv pdfgrep
 
Поиск по документам MS Word начиная с текущего каталога используя утилиту catdoc для чтения doc файлов
find . -name "*.doc" | while read i; do catdoc "$i" | grep -Hi --label="$i" -n "что_ищем"; done

или, используя утилиту antiword для чтения doc файлов

find . -name "*.doc" | while read i; do antiword "$i" | grep -H --label="$i" -n "что_ищем"; done

Поиск по документам OpenOffice Writer и LibreOffice Writer начиная с текущего каталога используя утилиту odt2txt для чтения odt файлов

find . -name "*.odt" | while read i; do odt2txt "$i" | grep -H --label="$i" -n "что_ищем"; done

Поиск по текстовым PDF файлам (не будет работать с файлами созданными из графических форматов, например отсканированные книни без текстового слоя):

find . -name '*.pdf' -exec pdftotext {} - \; | grep "что_ищем"

После работы однострочника выдается путь к файлу и номер строки с искомой фразой.
Прочитать документ можно так:

antiword "имя файла" | less
odt2txt "имя файла" | less

в less по "/" работает поиск.

также есть pdfgrep


xls2csv -s windows-1251 -d utf-8 name.xls - конвертировать xls в csv


*********************************************************************************************

мусор при сортировке мыла

"(admin|support|satu|*.png|facebook|@market.kz|Rating@Mail.ru|webmaster|no_reply|web@|pentagon)"

мусор при сортировке сайтов

egrep -v 'orgpage|static|ajax|yandex|addthis|schema|data-vocabulary|ogp\.|vk\.com|facebook|\.ru$|\.ru\.|\.me$|youtube|puzzleservice|damu|\.gov\.|wix\.com$|hotmail|shumgam|tomas|translations'

*********************************************************************************************

 Поменять регистр текста в текстовых файлах

 Все буквы будут большими:
sed -i 's/.*/\U&/' *.txt

Все буквы будут маленькими:
sed -i 's/.*/\L&/' *.txt


 Поиск и удаление файлов

find -name "что_ищем" -type f -exec rm {} \; - поиск и удаление всех что_ищем в текущем каталоге

find -name "*.ht*" -exec cat {} \; -type f > file - объединить все файлы в file

find -name "*.ht*" -exec egrep -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" {} \; -type f - поиск мыла

find -name "*.ht*" -exec egrep -o "(+[ +][7-8][ (][() 0-9-]{3,17})" {} \; -type f  - поиск телефонов
egrep "([ +][78]+[ (]+[() 0-9-]{3,17})|([ +]+[0-9()]{11,13})"


Поиск дубликатов файлов:

find ./ -type f | xargs -d\\n md5sum | sort | uniq -D -w 32 >duplicates.txt


 Windows

del e:\forall\*.gpg /s удаление файлов по маске в катлоге + вложенные
del e:\forall\*.vault /s


Сравнить содержимое двух каталогов

diff -urN dir1 dir2 > out.diff

после этого смотреть получившийся файл c подсветкой синтаксиса

mc -e out.diff


 Объединение файлов командой cat

 cat file1 file2 > file12


Удаление строки из файла

sed -i "/выкидыш/d" file

Основным инструментом работы с sed является выражение типа:

$ sed s/искомое_выражение/чем_заменить/имя_файла
Так, например, если выполнить команду:
$ sed s/int/long/ ./example.cpp
То все найденные последовательности int будут заменены на long

Вывод начиная со строки номер M, заканчивая строкой номер N.

M – начальная строка  N – конечная строка

sed -n M,Np FILENAME

Сортировка в файле  sort file1 > file2

Найти и удалить дубликаты строк в файле 
uniq myfile1.txt > myfile2.txt

 

Перемешать файл     sort file1 > file2 -R


 comm -- выбрать или отбросить строки, общие для двух файлов

 comm -23 1.txt 2.txt - вывод уникальных строк из 1.txt

СИНТАКСИС comm [-123i] файл1 файл2
ОПИСАНИЕ Утилита comm читает файл1 и файл2, которые должны быть предварительно лексически отсортированы, и генерирует вывод, состоящий из трех колонок текста: строки, найденные только в файле файл1; строки, найденные только в файле файл2; и строки, общие для обоих файлов.

Имя файла ``-'' означает стандартный ввод. Имеются следующие опции:

-1 Подавить вывод первой колонки.
-2 Подавить вывод второй колонки.
-3 Подавить вывод третьей колонки.
-i Нечувствительное к регистру сравнение строк.

Перед каждой колонкой будет напечатано столько символов табуляции, сколько печатается колонок с меньшими номерами. Например, если вывод второй колонки подавляется, то перед строками, печатаемыми в первой колонке, символов табуляции не будет совсем, а перед строками в третьей колонке будет напечатан один символ табуляции. Утилита comm предполагает, что файлы были предварительно лексически отсортированы; все символы участвуют в сравнении строк.

разница между файлами (долго работает на больших файлах)

grep -F -v -f 2.txt 1.txt

fgrep -v -f file2.txt file1.txt >результат.txt


-F Задает сопоставление с фиксированными строками. Каждый образец ищется как строка, а не как регулярное выражение. Если входная строка содержит любой из образцов в качестве подряд идущих байтов, такая строка считается соответствующей образцу. Пустая строка-образец соответствует любой строке.

-v   Выдает все строки, за исключением содержащих образец

-f    -f файл_образцов Читает один или несколько образцов из файла с указанным полным именем файл_образцов. Образцы в файле_образцов завершаются символом новой строки. Пустой образец можно задать с помощью пустой строки в файле_образцов. Если только вместе с этой опцией не указана опция -E или -F, каждый образец счиается простым регулярным выражением.


egrep -v "([</#=a-zA-Z&\';>])"  удаление служебных текстов из HTML
\d?[-. ]?\(?(\d{3})\)?[-. ]?(\d{3})[-.]?(\d{2})[-.]?(\d{2})

cat 1.txt | grep -v -f 2.txt 1>3.txt


Найти email адреса в файле с помощью grep

$ egrep -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file

Найти сайты  в файле с помощью grep

find -name "*.ht*" -exec egrep -o "http://+[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" {} \; -type f

 Поиск телефонов

egrep -o "(+[ +][7-8][ (][() 0-9-]{3,17})" file
egrep "([ +][78]+[ (]+[() 0-9-]{3,17})|([ +]+[0-9()]{11,13})" file

Опция                                           Описание
-E, --extended-regexp     Использовать расширенное регулярное выражение
-o, --only-matching     Печать только самих email адресов


Удаление старых файлов одной командой в Linux

Удобно помещать такую команду в cron.

Например, для файлов старше 5 дней:

find /path/to/files* -mtime +5 -exec rm {} \;

Для файлов, измененных в пределах 24...48 часов:

find /path/to/files* -mtime 1 -exec rm {} \;

Это версия для Debian, на RHEL надо писать чуть по-другому:

find /path/to/files* -mtime +0 -exec rm {} \;

Создать файлы для тестирования можно командой (например, дата 2 апреля):

touch -d '2 Apr' /path/to/test_file