Рубрики
разное Текст \ Файлы \ Папки

bash / sed / cut / awk / tr / cat / echo / comm / grep / paste / sort / работаем с текстом

Кусок файла примера zxc1.csv:

name;date;ip;allow;blok
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.4;yes;no
printer;15;192.168.0.4;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.7;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.7;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.7;yes;no
printer;15;192.168.0.1;yes;no
printer;15;192.168.0.1;yes;no

Решение:
cat zxc.csv | cut -f 3 -d";" | sort | uniq
awk -F ';' '{ print $1,$3 }' zxc.csv  | sort | uniq 

Кусок файла примера zxc1.csv:

Алексей,+2 (522) 7234-246-57
Александр,+3 (234944) 123-73-33
Ярослав,+4 (455) 62205-111-87
Максим,+5 (315) 51014-656-923
Дмитрий,+6 (2062) 6434-994-2983
Алексей,+7 (927435) 40302-1945-39844

Решение:
cat zxc1.csv  | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g'
cat zxc1.csv  | sed -e '{s/-//g}'  -e '{s/(//g}' -e 's/)//g' -e '{s/+//g}' -e '{s/ //g}' -e '{s/,/ /}'

Примеры sed

sed 's/string1/string2/g' example.txt - заменить string1 на string2 в файле example.txt и вывести содержимое
sed '/ *#/d; /^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed '/^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed '/serv*/a\ \'  - добавить пустую строку после слова serv
sed 's/serv/\nserv/' - добавить строку перед словом serv 

sed -n '/string1/p' - отобразить только строки содержащие string1
sed -n '5p;5q' example.txt - вывести пятую строку
sed -n '2,5p' example.txt - вывести строки со второй по пятую

sed -e '1d' exampe.txt - удалить первую строку из файла example.txt
sed -e 's/string//g' example.txt - удалить строку string1 из текста файла example.txt не изменяя всего остального
sed -e 's/ *$//' example.txt - удалить пустые символы в конце каждой строки файла example.txt
sed -e 's/00*/0/g' example.txt - Заменить последовательность из любого количества нулей одним нулём



Примем убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел:
cat zxc1.csv  | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' > rasilka.csv.edit
Используем специальный ключ "-e" убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел
cat zxc1.csv | sed -e 's/ //g' -e 's/-//g' -e 's/(//g' -e 's/)//g' -e 's/+//g' -e 's/,/ /g'

sed - пример шаблонов
---------------------
8d - удалить 8-ю строку
/^$/d -	удалить все пустые строки
1,/^$/d	- удалить все строки до первой пустой строки, включительно
/Jones/p - вывести строки, содержащие "Jones" (с ключом -n)
s/Windows/Linux/ - в каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux"
s/BSOD/stability/g - в каждой строке, заменить все встретившиеся слова "BSOD" на "stability"
s/ *$//	- удалить все пробелы в конце каждой строки
s/00*/0/g - заменить все последовательности ведущих нулей одним символом "0"
/GUI/d - удалить все строки, содержащие "GUI"
s/GUI//g - удалить все найденные "GUI", оставляя остальную часть строки без изменений
's/:.*//' - удалить от все последующие символы после двоеточия(:)
--------------------

echo

echo a b c | awk '{print $1,$3}' - вывести первую и третью колонки. Разделение, по-умолчанию, по пробельным символам или символу табуляции
echo a b c | awk '{print $1}' - вывести первую колонку содержимого файла. Разделение, по-умолчанию, по пробельным символам или символу табуляции
echo 'word' | tr '[:lower:]' '[:upper:]' - перевести символы нижнего регистра в верхний

comm

comm -3 file1 file2 - сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах
comm -1 file1 file2 - сравнить содержимое двух файлов, не отображая строки принадлежащие файлу file1
comm -2 file1 file2 - сравнить содержимое двух файлов, не отображая строки принадлежащие файлу file2

grep

grep [0-9] /var/log/messages - отобрать и вывести строки содержащие цифровые символы из файла /var/log/messages
grep ^Aug /var/log/messages - отобрать и вывести строки, начинающиеся с сочетания символов "Aug", из файла /var/log/messages
grep Aug /var/log/messages - отобрать и вывести строки, содержащие сочетание символов "Aug" из файла /var/log/messages
grep Aug -R /var/log/* - отобрать и вывести строки, содержащие сочетание символов "Aug", из всех файлов, расположенных в директории /var/log и ниже
grep шаблон путь_к_файлу - поиск в файле по шаблону
grep "что" "Где" - искать в файле 
grep -nri 'foobar' * - найти по папкам данное слово и вывести номер строки и путь до файла
grep -Er "что" *  - искать что во всех файлах и каталогах
grep -Eri "что" "Где" - искать что во всех файла и каталогах игнорируя регистр
grep -ri "что_ищем" * - поиск в файлах "что_ищем" в  текущем каталоге рекурсивно
grep -riv  "что_ищем" * -  показать все файлы кроме "что_ищем"
grep -v '^#' configfile | cat -s > nocomments - прочитать файл удалив строки с комментариями и сохранив в файл  nocomments
grep -irns "что_ищем" - будет искать начиная с текущего каталога, покажет имя файла и строку
grep -vE "Id|^$|---"  - исключит строки Id, пустые строки(^$) и исключить строки (---)
cat filename | grep -vE "^#|^$" - смотрим конфиги без комментариев (^#) и пустых строк (^$)
ls -la | grep -E "file1|file2" - показать file1 и file2 
cat file | grep -iE "(one|two|three)" - отфильтровать строки без учёта регистра, содержащие одно из слов one, two, three

paste

paste -d '+' file1 file2 - объединить содержимое file1 и file2 в виде таблицы с разделителем "+"
paste file1 file2 - объединить содержимое file1 и file2 в виде таблицы: строка 1 из file1 = строка 1 колонка 1-n, строка 1 из file2 = строка 1 колонка n+1-m

sdiff

sdiff file1 file2 - сравнить содержимое двух файлов

sed

sed 's/string1/string2/g' example.txt - заменить string1 на string2 в файле example.txt и вывести содержимое
sed '/ *#/d; /^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed '/^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt
sed -e '1d' exampe.txt - удалить первую строку из файла example.txt
sed -n '/string1/p' - отобразить только строки содержащие string1
sed -e 's/string//g' example.txt - удалить строку string1 из текста файла example.txt не изменяя всего остального
sed -e 's/ *$//' example.txt - удалить пустые символы в конце каждой строки файла example.txt
sed -n '5p;5q' example.txt - вывести пятую строку
sed -n '2,5p' example.txt - вывести строки со второй по пятую
sed -e 's/00*/0/g' example.txt - Заменить последовательность из любого количества нулей одним нулём

Кусок файла примера rasilka.csv для sed:
Алексей,+2 (522) 7234-246-57
Александр,+3 (234944) 123-73-33
Ярослав,+4 (455) 62205-111-87
Максим,+5 (315) 51014-656-923
Дмитрий,+6 (2062) 6434-994-2983
Алексей,+7 (927435) 40302-1945-39844

Примем убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел:
cat rasilka.csv  | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' > rasilka.csv.edit
Используем специальный ключ "-e" убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел
cat rasilka.csv | sed -e 's/ //g' -e 's/-//g' -e 's/(//g' -e 's/)//g' -e 's/+//g' -e 's/,/ /g'

sed - пример шаблонов
---------------------
8d - удалить 8-ю строку
/^$/d -	удалить все пустые строки
1,/^$/d	- удалить все строки до первой пустой строки, включительно
/Jones/p - вывести строки, содержащие "Jones" (с ключом -n)
s/Windows/Linux/ - в каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux"
s/BSOD/stability/g - в каждой строке, заменить все встретившиеся слова "BSOD" на "stability"
s/ *$//	- удалить все пробелы в конце каждой строки
s/00*/0/g - заменить все последовательности ведущих нулей одним символом "0"
/GUI/d - удалить все строки, содержащие "GUI"
s/GUI//g - удалить все найденные "GUI", оставляя остальную часть строки без изменений
--------------------

sort

sort file1 file2 - вывести отсортированное содержимое двух файлов
sort file1 file2 | uniq - вывести отсортированное содержимое двух файлов исключая повторные значения
sort file1 file2 | uniq -u -вывести уникальные значения из отсортированного содержимого двух файлов 
sort file1 file2 | uniq -d - вывести только повторяющиеся значения из отсортированного содержимого двух файлов 

Примеры работы с cut, sort, unic, sed, awk, tr


cat -n file1  - вывести содержимое файла, нумеруя выводимые строки
cat example.txt | awk 'NR%2==1' - вывести только не четные строки файла


cat zxc.csv | cut -f 3 -d";" | sort | uniq

Поясним про (cut -f 3 -d";") в данном примере: 
(-f 3) выбор столбца 3
(-d";")  выбор разделителя (;)
Поясним про (sort), он не обходим что бы работа (uniq) была выполнена правильно 
Поясним про unic - покажет уникальные значения

cat zxc.csv | sort | uniq | cut -d ";" -f1,3 | sed "s/;/ /g"
Поясним про (sort) - выполняет сортировку
Поясним про (unic) - покажет уникальные значения
Поясним про (cut -d ";" -f1,3) в данном примере: 
(-f1,3) выбор столбца 3,4
(-d";")  выбор разделителя (;)
Поясним про (sed "s/;/ /g"), тут выполняется поиск символа ";" и замена на символ пробела " "

cat zxc.csv | sort | uniq | cut -d ";" -f1,3 | sed "s/;/ /g" > zxc2.txt - выполняем  (sort,unic,cut,sed) и сохранение в файл zxc2.txt

sed -i 's/printer/robot/g' zxc2.txt - ищем в файле (zxc2.txt) слово (printer) меняем его на (robot)
sed -i 's/robot/slon/1' zxc2.txt - ищем в файле (zxc2.txt) слово (robot) меняем его на (slon)

awk -F ';' '{ print $1,$3 }' zxc.csv  | sort | uniq - с помощью (awk -F ';' '{ print $1,$3 }' zxc.csv ) выводим на экран 1 и 2 столбцы из файла zxc.csv, сортируем, показываем уникальные строки 


cat zxc.csv | sed -e 's/;/ /g' | cut -d ' ' -f 1,3  | sort | uniq

cat zxc.csv | awk -F';' '{print $1,$3}' | sort | uniq

cat zxc.csv | sed -e 's/;/ /g' | cut -d ' ' -f 1,3  | sort | uniq

cat zxc1.csv  | sed -e '{s/-//g}'  -e '{s/(//g}' -e 's/)//g' -e '{s/+//g}' -e '{s/ //g}' -e '{s/,/ /}'

cat zxc.csv  | awk -F ';' '{print $1,$3}' | sort | uniq

cat zxc.csv | cut -f 1,3 -d ';' | sed 's/;/ /g' | sort | uniq

cat zxc.csv | cut -f 1,3 -d ';' | tr ';' ' ' | sort | uniq

history | cut -c 8-120

ps -uax | awk -F ' ' '{print $1,$2,$11}'

ls -latr | awk -F ' ' '{print $3,$9}'

ls -hlatr | awk -F ' ' '{print $5,$3,$9}' | grep M | sort -u

Регистр:

echo 'word' | tr '[:lower:]' '[:upper:]' - перевести символы нижнего регистра в верхний
echo 'word' | tr '[:upper:]' '[:lower:]' - перевести символы верхнего регистра в нижний 

Ещё один пример достать нужное

1.txt
-----
mv: cannot stat '/etc/bareos/bareos-dir.d/catalog': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/director': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/messages': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/user': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/fileset': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/client': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/job': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/jobdefs': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/pool': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/schedule': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/storage': No such file or directory
mv: cannot stat '/etc/bareos/bareos-dir.d/use': No such file or directory
----

Достаем серединку:
cat 1.txt | cut -c `echo "mv: cannot stat " | wc -c`-`echo "mv: cannot stat '/etc/bareos/bareos-dir.d/schedule':"| wc -c` | sed -e "s/'//g" -e 's/:.*//'

cat 1.txt | cut -d "'" -f 2
cat 1.txt | awk -F"'" {print $2}



awk вставка текста в начало / конец строки

cat file.txt | awk '{print "xxx " $0}'
cat file.txt | awk '{print $0 " xxx"}'
cat file.txt | awk '{print "xxx " $0 " xxx"}'

cat file.txt | awk '{print $1}' | awk '{print "xxx " $0}'

AWK. Пример с пингом

Пингуем хосты с помощью программы fping и результат записываем в файл test_ping.txt
for x in `seq 2 254`; do fping -c1 192.168.1.${x}; done >> test_ping.txt
Парсим файл и там где хост пинговался в вывод добавляем ok.
cat test_ping.txt | awk "/ 0% loss/" | awk -F ':'  '{print $1 "ok"}'

sed еще примеры:

sed -n /root/p /etc/passwd - вывести строку содержавшие слово root, работает аналогично "grep root /etc/passwd"
sed 10q /etc/passwd - вывести первых 10 строк, работает аналогично head
sed -i.orig s/^alias/#alias/ file_name - заменить все строки которые начинаются на слово alias на #alias, при этом будет создана резервная копия file_name.orig
sed -i.orig /^alias/s/^/#/ - сначала ищем все слова которые начинаются на alias, потом заменяем символ начало строки "^" на решётку "#" 
sed -e /^#/d -e '/^$/d' file_name - показываем файл без комментариев и пустых строк

awk (оук?) еще примеры:

awk '{print "Hello"}' - если дальше продолжать нажимать Enter, то будет выводится Hello


Чем отличается перенаправление в cat
"EOF" - слова на которое завершится вставка текста
cat << "EOF" > filename1 - при такой передаче есть возможность использовать и передавать переменные bash как своим так и встроенные  $1,$2, $?, $i
cat  > filename1 << "EOF" - такая конструкция исключает передачу переменных, файл будет передан как есть 

Пример создаём файл filename1
cat << "EOF" > filename1
{
Hello
}
EOF
awk -f filename1 - открыв таким образом файл filename1 и если там будет скрипт выше, то мы получим эффект команды awk '{print "Hello"}'


awk /^root/{print} /etc/passwd - аналогично grep, покажет строку которая содержит слово root
ip a | awk /link/{print} - напечатать строку которая содержит слово link
ip a | awk '{print}NR==3{exit}' - напечатать 3 строки, аналогично "ip a |head -n 3"
ip a | awk 'END{print NR}' - аналогично команды "ip a | wc -l"
ip a | awk '{print $2}' - вывести второй столбец
ip a | awk '/^4/{print $1}' - вывести из первого столбца то что начинается на 4


Немного про спец символы в awk
$0 - весь файл (в баше это сам файл)
$1 - первый аргумент, выведет слова первой строки
...
$9 - девятый аргумент, выведет слова девятой строки
awk '{print $0}' /etc/passwd - будет выведен весь файл, эффект как от cat /etc/passwd
awk -F:  '{print $1,$3}' /etc/passwd - выведет первый и 3 столбик из файла 
awk -F: '/root/{print $1, $4, $7}' /etc/passwd - найти строку содержанию слово root и вывести 1,4,7 столбики

Пример с заменой
echo "one two tree nice 1" | awk '{$1="1"; $3="3"; $5="five"; print $0}'

Параметры BEGIN и END
Пример скрипта для awk
cat > filetest << "EOF"
BEGIN { print "Start" }
{print $1}
END { print "The end" }
EOF
Пример использования скрипта выше:
awk -F: -f filetest /etc/passwd

Еще один пример с BEGIN и END
FS: аналог awk -F:
awk 'BEGIN { print  "login \t home"; FS=":"} {print $1 "\t" $6} END {print "END file"}' /etc/passwd

Еще один пример BEGIN и END с заменой разделителя ":" на "%"
awk 'BEGIN{FS=":"; OFS="%"} {print $1, $4, $3}' /etc/passwd


Элементы ARGC(C- коунтер) и ARGV(V- валею) 
awk 'BEGIN{print ARGC, ARGV[0]}'
awk 'BEGIN{print ARGC, ARGV[1]}' /etc/passwd
awk 'BEGIN{print ARGC, ARGV[1], ARGV[0]}' /etc/passwd

Элемент ENVIRON
env - тут можно увидеть все текущие переменные
awk 'BEGIN{print ENVIRON["HOME"]}'
awk 'BEGIN{print ENVIRON["PATH"]}'

awk \ условия \ циклы \ if \ else \ for

Пример if для awk
cat > test << "EOF"
{
if ($1 < 2)
{
print 1
}
else if ($1 < 22)
{
print 2
}
else
{
print 0
}
}
EOF
Используем:
awk -f test - ну и вводим наше число и получаем результат

Пример for
awk 'BEGIN{ for (i=1; i<11; i++){print i}}'
awk 'BEGIN{ for (i=1; i<11; i++){if(i==5) break; print i}}'
awk 'BEGIN{ i=10 ; while (i>0){ print i; i-- }}'
Рубрики
Текст \ Файлы \ Папки

MIME linux \ соответствие между типами файлов

Описание:

Файл mime.types содержит список, в котором представлено соответствие между типами файлов (первый столбец) и расширениями файлов (все остальные столбцы). 
Например, типу application/pdf соответствует расширение PDF. 

Конфигурации:

/etc/mime.types         - Глобальная конфигурация для типов файлов
/etc/mailcap            - Глобальная конфигурация для программ
~/.mime.types           - Локальная конфигурация для типов файлов
~/.mailcap              - Локальная конфигурация для программ
/etc/magiс или ~/.magiс - В некоторых дистрибутивах стандартную конфигурацию можно изменять с помощью файлов 
Рубрики
Текст \ Файлы \ Папки

Файлы в linux \ имя файла \ регистр \ utf8 \ ls \ точки \

0. В ОС Linux имя файла должно быть не длиннее 255 символов.
1. Имена файлов чувствительны к регистру!
2. В именах файлов допускается указание международных символов, однако при использовании различных кодировок могут возникать проблемы
3. Во всех дистрибутивах Linux стандартной кодировкой считается UTF-8.
4. В имени файла может содержаться сколько угодно точек.
5. Файлы, имена которых начинаются с точки, считаются скрытыми. 
   Как правило, скрытые файлы не отображаются в программе ls и в различных файловых менеджерах (ls -a покажет файлы с точками).
6. Имена файлов, которые невозможно однозначно опознать как таковые после ввода команды (в частности, имена файлов, содержащие пробелы) должны даваться в кавычках (например: "а Ь").
7. Размер файлов в современных версиях Linux практически ничем не ограничен и в зависимости от файловой системы может исчисляться терабайтами.
Рубрики
Текст \ Файлы \ Папки

Работа с файлами и папками \ cd \ ls \ pwd \ etc \

pwd

pwd - вывести текущую директорию

cd

cd /home - перейти в директорию /home
cd .. - перейти в родительский каталог, то есть подняться на уровень выше
cd ../.. - подняться в дереве каталогов на два уровня
cd  - перейти в домашний каталог
cd ~user - перейти в домашний каталог пользователя user
cd - перейти в предыдущую директорию, из которой был сделан переход в текущую директорию

ls

ls - вывести листинг содержимого текущей директории
ls -F - листинг текущей директории с добавлением к именам символов, обозначающих тип объекта
ls -l - листинг текущей директории с подробностями по каждому объекту ( права доступа, владелец, группа, дата, размер )
ls -a - кроме обычных объектов, вывести в листинге, скрытые файлы и директории, текущего каталога
ls /tmp | pr -T5 -W$COLUMNS - листинг директории /tmp в 5 колонок
ls *[0-9]* - вывести в листинг файлов и директорий текущего каталога, содержащие в имени цифровые символы

tree

tree - листинг иерархии директорий и файлов, начиная с корневого каталога

cp

cp -a test_1 test_2 - копировать директорию test_1 в директорию test_2
cp file_1 file_2 - копировать файл file_1 в файл file_2
cp -a /tmp/test . - копировать директорию test и все ее содержимое в текущую директорию
cp test/* . копировать все файлы содержащиеся в директории test в текущую директорию

iconv

iconv -l - выводит список доступных для использования кодировок
iconv -c -f windows-1251 -t utf-8 inputFile > outputFile - конвертировать файл из кодировки windows-1251 в кодировку utf-8

ln

ln -s /path/to/filedir ./link - создать в текущей директории символическую ссылку link на директорию или файл filedir
ln /path/to/filedir ./link - создать в текущей директории жесткую ссылку link на директорию или файл filedir

mkdir

mkdir dir - создать в текущем каталоге, директорию с именем dir
mkdir dir_1 dir_2 - создать в текущем каталоге две директории, с именами dir_1 и dir_2
mkdir -p /path/to/dir - создать иерархию директорий. 
                        кроме самой директории dir будут созданы все промежуточные директории

mv

mv filedir new_filedir - переместить ( переименовать ) файл или директорию из filedir в new_filedir

rm

rm -rf /dir - рекурсивно удалить директорию dir и всё её содержимое, без запроса подтверждения на удаление
rm -f file - удалить файл file, без запроса подтверждения
rm -rf /dir_1 /dir_2 - удалить директории /dir_1 и /dir_2 вместе с содержимым, без запроса подтверждения

rmdir

rmdir /dir - удалить директорию /dir

tree

tree - вывести иерархию директорий и файлов, начиная с корневой (/)

touch

touch -t 0712250000 file1 - изменить дату и время создания файла, если указанный файл не существует, создать его с указанными датой и временем (YYMMDDhhmm)
touch file_name.txt - создать пустой файл  file_name.txt
Рубрики
Текст \ Файлы \ Папки

Просмотр содержимого файлов \ cat \ head \ tail \ more \ less

cat file1 - вывести все содержимое файла начиная с первой строки

head -2 file1 - отобразить две первые строки файла

tac file1 - отобразить содержимое файла начиная с последней строки

tail -f /var/log/messages - в реальном времени выводить все, что добавляется в файл
tail -2 file1 - вывести две последние строки файла

more file1 - отобразить содержимое файла построчно

less file1 - аналогично команде more но позволяет перемещаться по содержимому вперед и назад
Рубрики
Текст \ Файлы \ Папки

Конвертирование содержимого текстовых файлов \ dos2unix \ unix2dos \ recode \

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 - вывести список доступных форматов
Рубрики
Текст \ Файлы \ Папки

Alias в Linux

В Linux есть возможность переопределения имён команд, делается это с помощью команды alias,
формат команды следующий alias команда2=команда1. В данном примере команда1 команда которую 
мы переопределяем, команда2 команда которую определяем, ниже приведён текст реального 
конфигурационного файла .bashrc. Чтобы сделанные изменения вступили 
в силу надо перезагрузить систему.

# .bashrc
# Chmouel Boudjnah 
# User specific aliases and functions
alias cls=clear 
alias x86=startx 
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias d='ls'
alias s='cd ..'
alias p='cd -'
echo $PATH|grep -q /sbin || export PATH=$PATH:/sbin:/usr/sbin
# Tell to df to don't see the supermount filesystems.
alias df='df -x supermount'
#
[ -z $DISPLAY ] || . /etc/profile.d/color_ls.sh
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
ENV=$HOME/.bashrc
USERNAME="root"
export USERNAME ENV PATH
[ -z $INPUTRC ] && export INPUTRC=/etc/inputrc
Рубрики
Текст \ Файлы \ Папки

alias \ алиасы

 

Алиасы:
$ alias
alias cp='cp -1'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

unalias la  -  Удаляет предыдущий созданный алиас команды lа
unalias -а - Удаляет все созданные алиасы

Рубрики
Текст \ Файлы \ Папки

Устройства каталог /dev/*

 
/dev/cdrom	Ссылка на привод CD-ROM
/dev/console	Виртуальный терминал, активный в настоящий момент
/dev/disk/*	Дополнительные ссылки на устройства жестких дисков и сегментов
/dev/dri/*	Инфраструктура прямой визуализации (ЗР-графика с X)
/dev/dsp*	Доступ к звуковой карте (устройству цифрового сэмплирования)
/dev/fb*	Кадровый буфер (графическая карта)
/dev/hd*	IDE-дисководы (жесткие диски, CD- и DVD-приводы)
/dev/input/*	Мышь и джойстик
/dev/kbd	Клавиатура (PS/2)
/dev/kmem	Оперативная память (RAM) с магнитным сердечником (для отладчика)
/dev/lp*	Параллельные интерфейсы для принтера и т. д.
/dev/mapper	Файлы соответствия для программы управления логическими томами (LVM), пути к контейнерам и т. д.
/dev/md*	Мета-устройства (RAID и т. д.)
/dev/mem	Память (RAM)
/dev/mixer*	Доступ к звуковой карте
/dev/psaux	Мышь PS/2
/dev/port	Порты ввода-вывода
/dev/pts/*	Виртуальные терминалы стандарта UNIX 98
/dev/ptyp*	Виртуальные терминалы для X (типа «ведущий»)
/dev/ram	Виртуальный диск
/dev/rawl394	Непосредственный доступ к Firewire-устройствам
/dev/sd*	Жесткие диски SCSI/SATA/USB/Firewire
/dev/scd*	CD/DVD-приводы типов SCSI/SATA/USB/Firewire
/dev/shm	Совместно используемая память POSIX
/dev/snd	Звук ALSA (ссылка на /proc/asound/dev)
/dev/scd*	CD/DVD-приводы типов SCSI/SATA/USB/Firewire
/dev/hda	Жёсткий диск IDE / CD-ROM па первом порту IDE (мастер)
/dev/hdb	Жёсткий диск IDE / CD-ROM на первом порту IDE (подчинённый)
/dev/hdc	Жесткий диск IDE / CD-ROM па втором порту IDE (мастер)
/dev/hdd	Жёсткий диск IDE / CD-ROM на втором порту IDE (подчинённый)
/dev/hda1	Первый раздел на первом жёстком диске IDE
/dev/hdd15	Пятнадцатый раздел на четвёртом жёстком диске IDE
/dev/sda	Жёсткий диск SCSI с наименьшим SCSI ID (т.е. 0)
/dev/sdb	Жесткий диск SCSI со следующим наибольшим SCSI ID (т.е. 1)
/dev/sdc	Жёсткий диск SCSI со следующим наибольшим SCSI ID (т.е. 2)
/dev/sda1	Первый раздел на первом жёстком диске SCSI
/dev/sdd1O	Десятый раздел на четвёртом жёстком диске SCSI
/dev/sr0        SCSI CD-ROM с наименьшим SCSI ID
/dev/sr1        SCSI CD-ROM со следующим наибольшим SCSI ID
/dev/ttyS0      Последовательный MS-DOS портО, СОМ1 под
/dev/ttySl	Последовательный порт 1, COM2 под MS-DOS
/dev/psaux	Устройство мышь PS/2
/dev/gpmdata	Псевдо-устройство, повторитель данных от демона GPM (мыши)
/dev/cdrom	Символическая ссылка на привод CD-ROM
/dev/mouse	Символическая ссылка па файл устройства мыши
/dev/null	Всё, что записывается в это устройство, исчезнет
/dev/zero	Можно бесконечно читать пули из этого устройства
Рубрики
Текст \ Файлы \ Папки

MD5 \ hash \ проверка на наличие изменений файлов \ md5sum

MD5

 
http://www.miraclesalad.com/webtools/md5.php
md5 пароль 123456 
MD5 Hash: e10adc3949ba59abbe56e057f20f883e

Проверка на наличие изменений файлов с помощью снимка MD5

 
Проверка на наличие изменений файлов с помощью снимка MD5
find /etc -type f -exec md5sum {} \; > /tmp/md5.1ist 2> /dev/null - создать контрольную сумму MD5 для всех файлов каталога /etc
cd /etc - переходим в каталог /etc
md5sum -с /tmp/md5.1ist | grep -v "OK" - чтобы определить, были ли изменены какие-либо файлы

Доп

md5sum file_name - подсчитать контрольную сумму файла (MD5)
sha1sum file_name - подсчитать контрольную сумму файла (SHA1)
Рубрики
Текст \ Файлы \ Папки

Работа с файлами и директориями / ls / cd / df / du / cat / less / cp / mkdir / ln

Каталоги:

ls - показать содержимое каталога
ls -al - покажет все файлы, ссылки, размер, скрытые файлы
точка . - текущий каталог (пример использования cp /tmp/file.txt .) 
две точки .. - каталог уровнем выше (пример использования cd ..)

cd - смена текущего каталога
cd /tmp - перейти в каталог /tmp
cd ~ - перейти в домашний каталог
cd .. - перейти в каталог на уровень выше 

место:

 

fdisk -l - показать доступные диски и разделы

df -h - показать занятое место на  всех дисках
df - Показать свободное пространство на дисках и смонтированные устройства

du -s /var /log - показать размер каталога /var/log
du -sh /var /log - показать размер каталога /var/log (размер в Мб Кб)

du -s /usr/share/* - показать размер  всех каталогов внутри каталога  /usr/share/
du -s /usr/share/* | sort -n - показать размер всех каталогов внутри каталога  /usr/share/ и отсортировать по размеру (размер в Кб)

du -h - показать занятое место в текущем каталоге
du -sh * - Размер каталога (листинг файлов и подкаталогов)
du -csh - Размер текущей директории
du -ks * | sort -n -r - Сортировать по размеру (kbytes)
du -h --max-depth=1 / - сколько занято место 

ls -lSr - показать файлы с сортировкой по размеру

работа с содержимым файла:

 
wc -l filename - посчитать количество строк в файле
head -n 23 - прочитать файл от начала 23 строчки
tail -n 23 - прочитать файл с конца 23 строчки 
tail -n0 -f /var/log/syslog - наблюдать за файлом 
cut - показать содержимое  вырезав символы  
cut -c 1,4,7 name.txt - показать содержимое  вырезав символы  
cat /etc/passwd | cut -f 1,3,6 -d ':' - показать содержимое 1,3,6 столбика вырезав 2,4,5 разделенные символом  ':'
sort - сортировка файла 
cat - вывести содержимое файла 
expand name.txt - вывести заменив TAB на пробелы
od 1.txt - вывести и конвертировать  файл в 8-й код
nl 1.txt - вывести и нумеровать строки
paste 1.txt 2.txt -  объединить два файла построчно
pr 1.txt - покажет как будет выглядеть документ при печате на принтере
tr - трансформация текста в файле
less - просмотрщик файлов 


создание файлов:

touch -t 0712250000 fileditest - поменять дату файла fileditest
touch  lol{1,2,3}.txt - создать пустые файлы lol1.txt lol2.txt lol3.txt
:> filename.txt - дятел, создать пустой файл filename.txt
> filename.txt - создать пустой файл filename.txt
dd if=/dev/zero of=filemy bs=10M count=1 - создать блочный файл filemy размером 10Мб

создание директорий:

mkdir -p lol{1,2,3} - создать каталоги lol1 lol2 lol3
mkdir -p /root/hhh m{zxc1,zxc2,zxc3} - создать каталог /root/hhh и в нем каталоги mzxc1 nzxc2 mzxc3
mkdir -p /root/hhh/{zxc1,zxc2,zxc3} - создать каталог /root/hhh и в нем каталоги zxc1 zxc2 zxc3

распил:

split -b 1M filemy - разбить filemy на части размером 1 Мб с помощью опции -b
split -n 3 filemy - разрезание filemy на три части

копирование:

cp file1 file2 - копирование файла в файл 
cp file1 file2 dir - скопировать файлы в директорию
cp (x*~x[3-5]) newdir - скопировать все файлы вида x* кроме x3 по x5
cp *(^m0) newdir - скопировать файлы модифицированные не сегодня

вывод err,out,in:

2>stderr - ошибки
1>stdout - вывод
0>stdin - ввод

vi Минимальный набор команд:

vimtutor - программа для обучающая работе в vi
dd — удалить строку;
5dd — удалить 5 строк;
:x — выход с сохранением;
:q! — выход без сохранения изменений.
i — перейти в режим вставки;
a — перейти в режим вставки со следующего символа;
 — выход из режима редактирования.

nano

nano - редактор файлов, более дружелюбный чем vim ;)
# nano /etc/hosts                          # просмотр и редактирование файла
# export EDITOR=nano                       # делаем nano редактором файлов по умолчанию
 Ctrl+G - Показывает текст помощи (для выхода нажмите Ctrl+x) - F1
 Ctrl+X - закрыть редактор - F2
 Ctrl+O - сохранить - F3
 Ctrl+J - Выравнивает текст в текущем абзаце - F4
 Ctrl+R - Вставляет текст в текущий файл - F5
 Ctrl+W - Запускает поиск в тексте - F6
 Ctrl+W + затем Ctrl-T - переход к строке № 
 Ctrl+Y - Переходит к предыдущему экрану - F7
 Ctrl+V - Переходит к следующему экрану - F8
 Ctrl+K - вырезать строку в буфер - F9
 Ctrl+U - вставить из буфера - F10
 Ctrl+C - номер строки\текущая позиция - F11
 Ctrl+T - Начинает проверку правописания
 Alt+A - выделение (вне X)
 Alt+6 - копировать в буфер

nano memo.txt - открывает файл memo.txt для редактирования
nano -В memo.txt - при сохранении осуществляет резервное копирование предыдущего варианта в файл -.имя файла 
nano -m memo.txt - включает управление курсором с помощью мыши (если это поддерживается)
nano +83 memo.txt - начинает редактирование со строки 83

ln линки ссылки

 
жесткие ссылки - это различные имена одного и того же файла. при удалении всех ссылок удаляется сам файл
 
мягкие ссылки или симлинки не имеют собственных прав и указывают на владельца
удаляются ссылки с помощью команды rm
создаются ссылки с помощью команды ln
 
ln /что /на_что - без параметра s создастся жесткая ссылка. жесткие ссылки ограничены одной файловой системой
 
ln -s /что "название линка" - нужно быть в той папке куда нужно сделать линк (мягкая ссылка)
 
ln -s /var/usr/re ~/re - создаст симлинк на файл /var/usr/re и поместит его в домашний каталог
ln -s /2/e/txt /name - создаст симлинк
ln -s /путь/что /куда/как_назвать_симлинк  - последний параметр отвечает за название симлинка
Рубрики
Текст \ Файлы \ Папки

less горячие клавиши

home - переход к началу текста
end - переход к концу текста
g - переход к началу текста
shift+g - переход к концу текста
/ что_ищем - поиск (направление вперед)
? что_ищем - поиск (направление назад)
n - повтор поиска (вперед)
shift+n - повтор поиска  (назад)
q - завершение (выход)
h - отображение текста справки
Рубрики
Текст \ Файлы \ Папки

Emacs горячие клавиши

ctrl+x,ctrl+f  - загрузка нового файла
ctrl+x,ctrl+s - сохранение данного файла
ctrlx,ctrl+w - сохранение файла под новым именем
ctrl+g - прерывание ввода команды
ctrl+k - удаление строки
ctrl+x,u - отмена удаления
ctrl+x,ctrl+c - завершение работы emacs ( с запросом о сохранении)

Рубрики
Текст \ Файлы \ Папки

proc

/proc/n/*            Информация о процессе с идентификационным номером n
/proc/asound         ALSA (продвинутая звуковая архитектура Linux)
/proc/bus/usb/*      Информация о USB
/proc/bus/pccard/*   Информация о PCMCIA
/proc/bus/pci/*      Информация о PCI
/proc/cmdline        Параметры загрузки LILO/GRUB
/proc/config.gz      Конфигурационный файл (SUSE)
/proc/cpuinfo        Информация о процессоре
/proc/devices        Номера активных устройств
/proc/fb             Информация о кадровом буфере
/proc/filesystems    Драйверы файловых систем, содержащиеся в ядре
/proc/ide/*          Приводы и контроллеры IDE
/proc/interrupts     Использование прерываний
/proc/lvm/*          Применение диспетчера логических томов
/proc/mdstat         Состояние RAID
/proc/modules        Активные модули
/proc/mounts         Активные файловые системы
/proc/net/*          Состояние и использование сети
/proc/partitions     Разделы жестких дисков
/proc/pci            Информация о PCI (файл устарел, см. /proc/bus/pci)
/proc/scsi/*         Приводы и контроллеры SCSI
/proc/splash         Управление фоновым изображением VGA для текстовой консоли 1
/proc/sys/*          Информация о системе и ядре
/proc/uptime         Время в секундах, прошедшее с момента запуска компьютера
/proc/version        Версия ядра


Рубрики
Текст \ Файлы \ Папки

Обработка текста \ перенаправление ввода \ пайпы \ столбец в строку \ cat \ sort \ echo \ head \ tail \ cut \ tr \

Источник:

 
http://habrahabr.ru/post/105926/ - вдохновитель :)

Перенаправление вывода:

Как и > в командной строке, вы можете использовать < для перенаправления файла, но уже на вход команде. 
Для многих команд, можно просто указать имя файла. 
К сожалению некоторые программы работают только со стандартным потоком ввода. 

Bash и другие шелы поддерживают концепцию «herefile». 
Это позволяет давать входные данные команде в виде набора строк с последующей командой, означающей окончание ввода последовательности значений. 

Проще всего это показать на примере: 

$ sort <>"

Можно ожидать, >> будет в чем-то похожа на <<, но это не так. 
Она позволяет просто добавить вывод в файл, а не перезаписывать его каждый раз, как это делает >. 

Пример: 
$ echo Hi > myfile
$ echo there. > myfile
$ cat myfile
there.

Уупс! Мы потеряли часть с «Hi»! А вот что мы имели ввиду: 
$ echo Hi > myfile
$ echo there. >> myfile
$ cat myfile
Hi
there.

$ echo "firstfile" > copyme.txt

Пайпы:

Используя пайпы, мы можем передать вывод одной команды на вход другой. 
Символ | используется для подключения выхода команды слева, ко входу команды справа от него. 

$ echo "hi there" | wc
В примере выше, команда echo печатает в вывод «hi there» с символом перевода строки в конце. 
Этот вывод обычно появляется в терминале, но канал перенаправляет его на вход команде wc, 
которая показывает количество строк, слов и символов. 

$ ls -s | sort -n
В этом случае, ls -s обычно вывела бы текущую директорию на терминал, с указанием размера перед каждым файлом. 
Однако вместо этого, мы передаем вывод программе sort -n, которая численно отсортирует его. 
Это очень удобно для поиска файлов, которые занимают в директории больше всего места. 

Распаковывающий канал:

Для разархивации и распаковки файла, вы могли бы сделать следующее: 
$ bzip2 -d linux-2.4.16.tar.bz2
$ tar xvf linux-2.4.16.tar

Недостаток такого метода — это создание промежуточного, разархивированного файла на диске. 
Поскольку tar может читать данные напрямую со своего входа (вместо указанного файла), мы можем получить тот же конечный результат используя пайп: 
$ bzip2 -dc linux-2.4.16.tar.bz2 | tar xvf -
Сжатый тарбол был распакован и мы обошлись без промежуточного файла. 

Вот еще один пример пайпа: 
$ cat myfile.txt | sort | uniq | wc -l
Мы используем cat для отправки содержимого myfile.txt команде sort. 
Когда sort получает данные на вход, она сортирует их построчно в алфавитном порядке, и отправляет в таком виде программе uniq. 
uniq удаляет повторяющиеся строки (кстати uniq, требует отсортированный список на входе) и отправляет результат на wc -l. 
Мы рассматривали команду wc ранее, но без ее опций. Когда указывается опция -l, то команда выводит только количество строк, количество слов и символов в этом случае не выводятся. 
Вы увидите, что такой пайп распечатает количество уникальных строк в текстовом файле.

echo

echo - печатает свои аргументы на терминал
Используйте опцию -e если хотите включить в вывод управляющие последовательности; например echo -e 'foo\nfoo' напечатает foo, затем перейдет на новую строку, затем снова напечатает foo. 
Используйте опцию -n чтобы запретить echo добавлять символ новой строки в конец вывода, как это сделано по-умолчанию.
echo -e 'foo\nfoo'
echo -n 'foo'
echo  -e " Имя хоста `hostname` \n Текущие время `date` "

cat

cat - напечатает содержимое указанного файла на терминал.
cat foo.txt | blah
cat foo.txt
cat /etc/passwd
cat file.txt | wc -l - посчитать число переводов строк
cat file.txt | wc -w - посчитать число слов
cat new.txt | sed '/ *#/d; /^ *$/d' > newfile - удаление комментариев и пустых строк
cat filename.txt | sed '/^ $/d' > newfile - удаление пустых строк
cat ~/.ssh/known_hosts | sed "[nomer_stroki_1],[nomer_stroki_2]d" > ~/.ssh/known_hosts  - удаление строк(и) из файла с заранее известным номером


Фишки перенаправления с помощью cat
0. Перенаправить текст в файл как есть (без преобразования переменных и т.д.
Эфект достигается если стоп слово (в примере EOF) взято в кавыки ("EOF")

cat << "EOF" > script.sh
#!/bin/bash
echo "${ggg}" 
EOF

cat > script.sh << "EOF"
#!/bin/bash
echo "${ggg}" 
EOF


1. Перенаправить текст в файл с преобразованием переменных 
Нету кавычек в EOF, переменные будут переданы.
cat << EOF > script.sh
#!/bin/bash
echo "${ggg}" 
EOF

2. пример проверки:
Пишем в консоль
ggg=500
Потом выполняем:
cat << EOF > script.sh
#!/bin/bash
echo "${ggg}" 
EOF
Проверяем что получилось, проверяем другие варианты работы cat
cat  script.sh

tac

tac - похожа на cat, но печатает все строки в обратном порядке, другими словами, последняя строка печатается в первую очередь.

sort

sort - выведет содержимое файла, указанного в командной строке, в алфавитном порядке
Естественно, sort также может принимать ввод из пайпа. 
Наберите man sort чтобы ознакомиться с опциями команды, которые управляют вариантами сортировки. 
du -ks * | sort -n -r - Сортировать по размеру (kbytes)
du -s /usr/share/* | sort -n - показать размер всех каталогов внутри каталога  /usr/share/ и отсортировать по размеру (размер в Кб)

ps uax | grep -v "\ 0\.0\ " | cut -c 1-120 | sort -nrk 3 | grep -v "USER"- программа ps покажет все процессы, grep уберёт лишние процессы программа, cut обрежет вывод (уберет лишний текст), sort произведет сортировку, grep уберёт строку со словом  USER

ps uax | sort -nrk 3 - сортировать по числу(-n) из третьей колонки(-k 3), в порядке убывания (от большего к меньшему) (-r)

ps uax | tr -s " " | cut -f 1,2,3,11 | sort -nrk 3 | cut -c 1-100 - программа ps покажет все процессы, tr заменит все символы разделители на пробел (tr -s " "), с помощью cut мы выберем столбцы, отсортируем вывод по третьей колонке, в конце cut обрежет сроки до 100 символов

ps uax | sort -nrk 3 | tr -s " " | cut -f 1,3,11 -d " " | head - программа ps покажет все процессы, sort отсортирует по третьему столбцу,  tr заменит все символы разделители на пробел (tr -s " "), cut покажет три столбца (1,3,11),  head выведет первые десять строк

ps uax | sort -nrk 3 | tr -s " " | cut -f 1,3,14 -d " " | head -n3 - программа ps покажет все процессы, sort отсортирует по третьему столбцу,  tr заменит все символы разделители на пробел (tr -s " "), cut покажет три столбца (1,3,14),  head выведет первые три строки

uniq

uniq - принимает уже отсортированный файл или поток данных (через пайп) и удаляет повторяющиеся строки. 

wc

wc - выводит количество строк, слов и символов в указанном файле или во входном потоке (из пайпа). 
Введите man wc чтобы узнать, как настроить вывод программы. 
wc -l filename - посчитать количество строк в файле
cat file.txt | wc -l - посчитать число строк
cat file.txt | wc -w - посчитать число слов

head

head - выводит первые десять строк файла или потока. 
Используйте опцию -n, чтобы указать, сколько строк должно отображаться. 
head -n 23 - прочитать файл от начала 23 строчки

tail

tail - печатает последние десять строк файла или потока. 
Используйте опцию -n, чтобы указать, сколько строк должно отображаться. 
tail -n 23 - прочитать файл с конца 23 строчки 
tail -n0 -f /var/log/syslog - наблюдать за файлом 

expand

expand - конвертирует входные символы табуляции в пробелы. 
Опция -t указывает размер табуляции. 
expand name.txt - вывести заменив TAB на пробелы

unexpand

unexpand - конвертирует входные пробелы в символы табуляции. 
Опция -t указывает размер табуляции. 

cut

cut - используется для извлечения из входного файла или потока, 
полей разделенных указанным символом. (попробуйте echo 'abc def ghi jkl' | cut -d ' ' -f2,2 прим. пер.)
cut - показать содержимое  вырезав символы  
cut -c 1,4,7 name.txt - показать содержимое  вырезав символы  
cat /etc/passwd | cut -f 1,3,6 -d ':' - показать содержимое 1,3,6 столбика вырезав 2,4,5 разделенные символом  ':'

nl

nl - добавляет к каждой входной строке ее номер. Удобно для распечатки. 
nl 1.txt - вывести и нумеровать строки

pr

pr - разбивает файл на страницы и нумерует их; обычно используется для печати. 
pr 1.txt - покажет как будет выглядеть документ при печате на принтере

tr

tr - трансформация текста в файле
tr - инструмент трансляции (преобразования) символов; 
используется для отображения определенных символов во 
входном потоке на заданные символы в выходной поток. 

sed

sed - мощный потоко-ориентированный текстовый редактор. Обычно используется с cat
sed '/ *#/d; /^ *$/d' - удаление комментариев и пустых строк
sed '/^ $/d' - удаление пустых строк
sed 's/^[ \t]*//' - удалить все пробелы и символы табуляции в начале каждой строки файла (смотрите примечание по табуляции в конце документа)
sed 's/foo/bar/' (замена только первого совпадения в строке) - поиск и замена "foo" на "bar" в каждой строке
sed 's/foo/bar/4' (замена первых 4рех совпадений в строке) - поиск и замена "foo" на "bar" в каждой строке
sed 's/foo/bar/g' (замена ВСЕХ совпадений в строке) - поиск и замена "foo" на "bar" в каждой строке
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' (замена предпоследнего совпадения) - поиск и замена "foo" на "bar" в каждой строке
sed 's/\(.*\)foo/\1bar/' (замена только последнего совпадения) - поиск и замена "foo" на "bar" в каждой строке


cat new.txt | sed '/ *#/d; /^ *$/d' > newfile - удаление комментариев и пустых строк
cat filename.txt | sed '/^ $/d' > newfile - удаление пустых строк
cat ~/.ssh/known_hosts | sed "[nomer_stroki_1],[nomer_stroki_2]d" > ~/.ssh/known_hosts  - удаление строк(и) из файла с заранее известным номером
cat file.name.txt | sed 's/ *$//' > file.txt - удалить все пробелы в конце каждой строки.
sed -r '/(^#.*$)|(^[0-9a-zA-Z\.\:\/\-]+(\.ru\/?)[a-zA-Z0-9\/\-\?\,\]*$)/!{s/^/#/}' text.txt > newtext.txt - все что не соответствует шаблону будет закомментировано
sed -i '1 i 000' file - добавить нужную строку в файл

cat rasilka.csv  | sed 's/ //g' | sed 's/-//g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' > rasilka.csv.edit

awk

awk - искуссный язык построчного разбора и обработки входного потока по заданным шаблонам. 

od

od - разработан для представления входного потока в восьмеричном, шестнадцатеричном и т.д. формате. 

split

split - эта команда используется для разделения больших файлов на несколько небольших, более управляемых частей. 
split -b 1M filemy - разбить filemy на части размером 1 Мб с помощью опции -b
split -n 3 filemy - разрезание filemy на три части

fmt

fmt - используется, чтобы выполнить «перенос» длинных строк текста. 
Сегодня она не очень полезна, поскольку эта возможность встроена в большинство текстовых редакторов, 
хотя команда достаточно хороша, чтобы ее знать. 

paste

paste - принимает два или несколько файлов в качестве входных данных, объединяет построчно и выводит результат. 
Может быть удобно для создания таблиц или колонок текста. 
paste 1.txt 2.txt -  объединить два файла построчно

join

join - похожа на paste, эта утилита позволяет объединять 
два файла по общему полю (по-умолчанию первое поле в каждой строке). 

tee

tee - печатает входные аргументы в файл и на экран одновременно. 
Это полезно, когда вы хотите создать лог для чего-либо, а также хотите видеть процесс на экране. 

Как вставить текст в нужное место файла:

Нашей задачей будет вставка всего содержимого текстового файла 
в нужную строку и графу другого текстового файла.
Если нужно просто вставить текст после определенной строки, то с этим справится несколько команд Linux. 
Например, чтобы вставить содержимое файла file1.txt после второй строки файла file2.txt, 
подойдет любая из команд:

$ sed -i '2r file1.txt' file2.txt
$ awk '{print} NR==2 {while (getline < "file1.txt") print}' file2.txt
В отличие от команды sed, которая внесет изменения в файл file2.txt, 
команда awk выдаст результат на стандартный вывод (Stdout);
при желании его можно переадресовать в новый файл. 
Это удобнее, когда не нужно изменять исходный файл.
$ emacs -batch +3 file2.txt --insert file1.txt -f save-buffer -kill
В этом заклинании используется функция batch (группирование, пакетирование) редактора emacs. 
Команда открывает file2.txt на строке 3, вставляет file1.txt, сохраняет и потом закрывается. 
Изменения, таким образом, вносятся непосредственно в file2.txt.
$ vi +2 file2.txt << DELIM
> :r file1.txt
> :wq
> DELIM
Vim: Warning: Input is not from a terminal
Необходимо пояснить, что в командную строку вы вводите только первую строку:
$ vi +2 file2.txt << DELIM 
и нажимаете ENTER. Все последующие строки вы вводите уже в строку приглашения редактора vi, 
которая начинается со знака >.
В распоряжении Linux много утилит для работы с текстом (sed, perl, awk, cut, python), 
но для выполнения второй части задания — поместить вставку не только в нужную строку, 
но и в нужную колонку текста, я не придумал ничего удобнее emacs:

$ emacs -batch -Q +2:3 file2.txt --insert file1.txt -f save-buffer -kill 2>/dev/null
Секрет в цифрах +2:3, которые приказывают редактору открыть вторую строку и 3 столбец.

Еще несколько объяснений по поводу данной команды. Опция -Q означает быстрое открытие файла. 
Быстрое потому, что, по умолчанию, emacs не откроет ни init, ни splash файлы. 
И еще: выражение в конце команды 2>/dev/null 
переадресует все сообщения редактора в файл /dev/null, 
то есть не выводит их на экран монитора.
Команды sed, awk или perl могут справиться с поставленной задачей

split или как мы вставляли нужную надпись между строк (не было ни sed nano т.д.):

1. cp my.txt my.txt.back
допустим нам над вставить фразу между строк 599 и 600
cat my.txt |wc -l так мы узнаем сколько там всего строк (если нужно)
2. split -l 599 my.txt (файл разделиться)
3. echo "нужная фраза" >> ma.txt ( где ахх это первая половина с 599 строками)
4. cat ma.txt mb.txt >> new.txt (собрали обратно с нужной фразой между 599 и 600 строками)

tr столбец в строку

 cat /var/db/repos/gentoo/profiles/use.desc | awk '{print $1 " " }' | tr -d '\n'

head / tail / cut / awk / sed

Команды head и tail выводят по умолчанию десять первых и последних строк соответственно потока или файла. 
Требуемое количество строк может быть указано.
head -3 /etc/passwd
tail –f /var/log/messages

Вывод требуемых полей с помощью cut
cut -f1 /etc/hosts
cut -f1,3 -d: /etc/passwd

Потоковый редактор sed
Потоковый редактор sed позволяет либо прочитать входной поток для обработки из стандартного потока ввода, либо осуществить чтение текстового файла, заданного в качестве аргумента. 
Обработанный текст передается в стандартный поток вывода. 
Редактор sed работает с целыми строками текста.
- номером строки;
- диапазоном строк с указанием первого и последнего номеров строк в диапазоне через запятую (например, команда sed '2,4d' удалит в потоке строки со второй по четвертую включительно).  
  Можно указать диапазон до последней строки.
  Последняя строка обозначается символом доллара ($);
- с помощью регулярного выражения или, в простейшем случае, подстроки, которая должна находиться в адресуемых строках.

Удаление строк по подстроке
$ ps -e | sed '/tty/d'

Наиболее часто используются следующие команды языка sed:
d — удаление
p — вывод строки (от англ. print)
s — замена искомой подстроки на заданную подстроку
i — вставка строки
a — добавление строки
c — изменение всей строки на заданную строку
q — выход без дальнейшей обработки и вывода строк
y — команда транслитерации символ в символ
= — команда печати номера строки

Команда q редактора sed:
sed /daemon/q /etc/passwd

Замена строк с помощью sed:
sed s/bash/zsh/ /etc/passwd

Требуется вывести содержание файла /etc/group (файл с информацией о группах пользователей и членстве в них) следующим образом:
- должны быть выведены только группы, включающие пользователя user1;
- все знаки двоеточия должны быть заменены символом подчеркивания.

Сложная команда sed
sed -n /user1/s/:/_/gp /etc/group

Добавление строк с помощью sed
last | sed '/user1/a \#####################'


Общий вид сценария awk:
BEGIN
Команды формирования заголовка отчета
/шаблон/ { команды обработки строк }
END
Команды формирования завершения отчета

Сценарий awk может состоять из трех частей:
- команды формирования заголовка — следуют после BEGIN
- команды основного цикла обработки строк заключаются в фигурные скобки
- команды формирования завершения отчета — следуют после END

Команды могут находиться в файле сценария, имя которого должно быть указано после опции -f, либо может быть задано в качестве аргумента awk.
Если шаблон для команды не указан, то обработке подвергаются все строки. 
Если же, наоборот, шаблон задан, а команда — нет, то в stdout выводятся только строки, подходящие шаблону. Например, следующая команда выведет из файла /etc/passwd все строки, содержащие подстроку bash.

awk /bash/ /etc/passwd

Для этого необходимо вывести первое и третье поле этого файла. 
Утилита awk позволяет обращаться к полям строк, разделенных с помощью пробелов
или табуляций, следующим образом: $0 — вся строка, $1 — первое поле, $2 — второе и т. д.
В нашем случае разделителем полей является двоеточие, поэтому данный символ надо указать после опции -F
Вывод требуемых полей обеспечивает команда print.

awk -F: '/bash/{print $1,$3}' /etc/passwd

Фильтрация по числовому значению
awk -F: '$3>100{print $1,$3}' /etc/passwd

Одной из наиболее часто используемых встроенных переменных является NR — номер строки в потоке. 
Так, в предыдущем примере перед именами пользователей можно вывести номера строк, считанных из файла /etc/passwd.
awk -F: '$3>100{print NR,$1,$3}' /etc/passwd

Пример демонстрирует, как можно получить список только тех файлов, длина имен которых больше 15 символов.
ls | awk 'length($0)>15'

expand / Замена символов табуляции на пробелы

Команда expand предназначена для преобразования символов табуляции в пробелы. 
По умолчанию символ табуляции заменяется восемью пробелами, однако можно точно указать требуемое количество пробелов для замены табуляции.
Имеется команда unexpand, заменяющая пробелы символами табуляции

echo -e 'Строка\tс\tтабуляцией'
echo -e 'Строка\tс\tтабуляцией' | expand -3

fmt / Простое форматирование текста

Команда fmt предназначена для форматирования текста. 
Команда объединяет и разделяет строки так, чтобы результирующая строка имела заданную длину (по умолчанию — 75 символов). 
Команда fmt пытается разделить длинные строки, начиная с длины строки, меньшей на 7%, чем установленная максимальная длина строки. 
Опция -w позволяет указать ширину текста в символах.
Если необходимо только разделять строки, но не объединять их, то следует использовать опцию -s.


ls -l /home | fmt -w50 -s

sort / Сортировка строк

Команда sort предназначена для сортировки строк файлов — аргументов.
Если файлы не указаны, команда сортирует строки из стандартного потока ввода. 
По умолчанию команда sort сортирует строки в алфавитном порядке по возрастанию. 
При необходимости сортировки строк в порядке убывания используется опция -r .
Команда sort способна также сортировать текстовый поток не только по целым строкам, но и по отдельным полям строк. 
Разделителем полей по умолчанию считается пробел. 
Если используется иной разделитель полей, его следует указать после опции -t.
Для указания номера поля для сортировки используется опция -k.
Опция -n позволяет задать команде sort не алфавитный, а числовой порядок сортировки. 
Пример показывает, как отсортировать учетные записи пользователей, в порядке возрастания их UID.

sort -t: -k3 –n /etc/passwd

В файле /etc/passwd разделителем полей является двоеточие. 
Это установлено опцией -t. 
Сортировка была выполнена по третьему полю (опция -k3), в котором содержатся UID пользователей. 
Сортировка была проведена в числовом порядке, что было установлено опцией -n.

sort / uniq / Вывод неповторяющихся строк

Фильтр uniq удаляет повторения строки в сортированном потоке. 
Команда в примере выведет строки файлов f1 и f2 так, что если какая-либо строка имеется в обоих файлах, то в поток вывода попадет только одна ее копия.
cat f1 f2 | sort | uniq

Опция -c команды uniq позволяет подсчитать количество вхождений каждой строки во входном потоке.
Опция -d позволяет вывести только дублирующийся строки, что помогает, например, узнать, какие строки имеются одновременно в разных файлах. 
Опция -u выводит только уникальные (не дублированные) строки. 
Для игнорирования регистра при сравнении строк можно установить опцию -i.
Если строки входного потока разделены на поля, то можно пропустить заранее заданное количество полей до определения уникальности строки. 
Для пропуска первых полей, разделенных пробелами, необходимо указать их количество после опции -f. 
Например, команда uniq –f6 пропустит шесть первых полей входного потока при определении уникальности строк.

join / Объединение строк двух файлов по общему полю

Команда join построчно объединяет содержимое заранее отсортированных файлов по общему полю. 
Выходная информация направляется в стандартный поток вывода. 
По умолчанию предполагается, что поля отделяются друг от друга пробелами или табуляцией. 
Опция -t позволяет указать требуемый символ-разделитель полей.
Объединение производится по первым полям строк файлов. 
Если необходимо произвести объединение строк файлов не по первым полям строк, 
то номера этих полей необходимо указать после опций -j1 — для первого файла и -j2 — для второго файла. 
Содержимое файлов должно быть отсортировано этим полям.
Для того чтобы вывести вместе с объединенными строками непарные строки,
которые обычно не выводятся, необходимо использовать опцию -a. 
После этой опции следует указать номер файла, из которого будут выведены непарные строки. 
Наоборот, опция -v позволяет вместо объединенных строк вывести только непарные строки того файла, 
номер которого указан после этой опции.

wc / Подсчет количества и нумерация строк

Команда wc позволяет подсчитывать количество символов, слов и строк в файле, указанном в качестве аргумента или в стандартном потоке ввода.
wc /etc/hosts
cat /etc/hosts | wc

При необходимости можно установить вывод только числа:
 строк — с использованием опции –l;
 слов — при установленной опции –w;
 символов — при использовании опции -c.

who | wc -l

nl / Нумерация строк

Команда nl позволяет пронумеровать строки в тексте, считанном из файла или из потока ввода. 
Команда cat -b также нумерует строки, однако возможности команды nl намного шире. 
Опции nl позволяют устанавливать формат нумерации строк, особым образом нумеровать пустые строки, устанавливать шаг нумерации и т. п

tr / Замена символов с помощью команды tr

Команда tr читает поток ввода и преобразует его. 
Она позволяет выполнять преобразования, приведенные далее в списке.
- Замена символов в потоке. 
  Задают два набора символов. Символы из первого набора заменяются соответствующими по порядку символами из второго набора.
- При использовании опции -d удаляются символы, указанные в наборе.
- Исключение повторения символов в потоке. 
  Символы, повторы которых должны быть исключены, задаются в наборе — опция -s.
- Замена символов в потоке с последующим устранением их повторов. 
  При этом задаются два набора символов и устанавливается опция -s. 
  Вначале команда tr заменяет символы, а затем устраняет повторения символов из второго набора.
- Удаление символов из потока с последующим устранением повторов.
  Этот режим требует установки опций -d и -s. 
  Вначале удаляются символы из первого набора, а затем устраняются повторы из второго

Слово капсом
echo tarelka | tr a-z A-Z

Удаление символов
Здесь в качестве входного потока был использован вывод команды ls /, из которого были удалены все символы перевода строк.
ls / | tr -d '\n'

Устранение повторов выполняет опция -s
echo root | tr -s o

Опция -c команды tr позволяет инвертировать смысл задаваемого множества символов, т. е. удалить при использовании -d все, 
кроме символов, указанных в наборе. Например, команда tr –dc 0-9 удалит во входном потоке все, кроме цифр
echo root | tr -cd o\\n


С опцией -t команда tr обрезает длину первого набора по длине второго, для того чтобы количество символов в них равнялось.

Можно указать класс символов из набора предопределенных символов
[:alnum:] Символы алфавита в любом регистре и цифры
[:alpha:] Символы алфавита в любом регистре
[:blank:] Пустое множество
[:cntrl:] Управляющие символы
[:digit:] Десятичные цифры
[:graph:] Все символы, которые могут быть напечатаны, кроме пробела
[:lower:] Алфавитные символы в нижнем регистре
[:print:] Все символы, которые могут быть напечатаны
[:punct:] Все символы пунктуации
[:space:] Пробел или табуляция
[:upper:] Алфавитные символы в верхнем регистре
[:xdigit:] Шестнадцатеричные цифры

echo "str" | tr [:lower:] [:upper:]

paste / Слияние строк

При необходимости вывести в одну строку содержимое файла можно использовать команду paste -s. 
Так, приведенная в примере 8.45 команда выведет в виде одной строки содержимое файла /etc/hosts.
paste -s /etc/hosts

Без опции -s команда paste выводит строки файлов-аргументов параллель но, т. е. первая строка первого файла вместе с первой строкой второго файла и т. д.
Если paste должна читать из стандартного потока ввода, то вместо имени файла указывают символ тире. Колонок вывода будет столько, сколько тире.
ls / | paste - - - - - - - -

od / Получение дампа

Команда od позволяет получить восьмеричный, десятичный или шестнадцатеричный дамп потока или файла. 
В первом столбце команда od выводит смещение в потоке (адрес). 
Далее выводятся значения считанных из потока символов.

echo ABC | od -toC

Опции -to команды od задают вывод дампа в восьмеричном формате, а опция -C указывает, 
что входной поток должен быть интерпретирован как символьный.
Бывает удобно отобразить дамп не в виде численных значений, а с помощью "именованных символов". 
Для этого используются опции -ta

echo ABC | od -ta

Можно установить формат для вывода смещения. 
Для этого необходимо воспользоваться опцией -A, указав далее базис, где:
-Ad — десятичное знаковое целое
-Au — десятичное беззнаковое целое
-Ao — восьмеричное целое
-Ax — шестнадцатеричное целое
-An — подавить вывод адреса смещения
Аналогичные модификаторы можно использовать после опции -t для получения дампа в различных форматах.

Для всех целых базисов можно указать следующие форматы:
-C — символьный (char)
-S — короткое целое (short)
-I — целое (int)
-L — длинное целое (long)

Помимо od для получения дампов можно использовать hexdump.

hexdump

split / Разделение файлов на части

Команды split и csplit не являются текстовыми фильтрами. 
Они предназначены для разделения файлов на части, которые записываются в другие файлы со специальными именами. 
Эти файлы образуются в текущем каталоге.
Команда split разделяет содержимое файла на части, которые записываются в отдельные файлы. 
По умолчанию команда записывает в отдельный файл каждые 1000 строк текста. 
Имена файлов начинаются со строки префикса и дополняются символами нумерации, начиная с aa. 
Если префикс не указан, то используется префикс по умолчанию — символ x, а имена файлов, в которые будут записаны части разделенного файла, 
будут иметь вид: xaa, xab, xac, ...
Опция -l команды split позволяет указать, сколько строк должно содержаться в частях файла

split –l9 /etc/passwd

Опция -b команды split позволяет указать, сколько байтов должно содержаться в частях файла. 
Так можно разделять на части бинарные файлы. 
Команда split –b5K разделит файл на части, содержащие по 5 Кбайт кроме, возможно, последней части.

Опция -Cn позволяет записывать в выходные файлы столько целых строк исходного файла, сколько можно записать, так, чтобы размер выходных файлов не превысил n байт. 
Например, команда split -C1024 разделит файл на час ти, не превышающие по размеру 1 Кбайт и содержащие целые строки исходного текста.

Следует отметить, что команда csplit по умолчанию делит исходный файл на две части при удачном поиске, 
т. к. прекращает работу сразу после первого вхождения образца. 
Во второй части исходного файла могут содержаться вхождения образца, по которым исходный файл может быть разделен далее.
Можно указать число повторов поиска образца в фигурных скобках. 
Например, команда csplit file /etc/ {1} повторит поиск регулярного образца один раз. 
В случае если повторный поиск неудачен, команда csplit завершает свое выполнение с выводом сообщения об ошибке, а все части исходного файла стираются. 
Опция -k отменят удаление выходных файлов в случае ошибки повторного поиска по регулярному выражению.

Рубрики
Текст \ Файлы \ Папки

Пустой файл в *nix (10 способов)

1 способ

Самый простой, однако, малоизвестный способ:
$>emptyfile
где emptyfile – пустой файл, создаваемый в текущей директории;
Так можно создавать и множество пустых файлов, записывая их цепочкой:
$>emptyfile>emptyfile2>emptyfile3
Данный способ работает в оболочках bash (sh, bash2, ...) и Korn (ksh), но не работает в C-shell (csh), 
T-shell (tcsh) и некоторых других :(.

2 способ

Это один из самых распространенных способов создания пустого файла:
$touch emptyfile
Аналогично, можно создавать и множество empty-файлов, 
записывая их названия по порядку через пробелы:
$touch emptyfile emptyfile2 emptyfile3

3 способ

Еще один знаменитый способ:
$cat>emptyfile
Однако чтобы избавить себя от дополнительного 
нажатия горячих клавиш (Ctrl+D), данную команду следует вводить так:
$catemptyfile
И соответственно для нескольких пустых файлов:
$catemptyfile>emptyfile2>emptyfile3

4 способ

Это также не менее употребляемый способ:
$echo>emptyfile
Однако в результате этой команды файл получится не нулевого размера (1b) 
и будет содержать пустую строку. Если это имеет какое-нибудь значение, 
то для создания файла нулевого размера данную команду следует вводить так:
$echo>emptyfile>/dev/null
или так:
$echo 0>emptyfile
а для создания множества файлов, например, так:
$echo>emptyfile>emptyfile2>emptyfile3>/dev/null
Правда, последний файл в цепочке всегда будет создаваться 
с пустой строкой (в комбинации с «echo 0» - аналогично). 

5 способ

Оригинальный способ — с помощью команды копирования и нулевого устройства:
$cp /dev/null emptyfile
Примечание: чтение из /dev/null всегда дает символы конца файла (EOF)!
Использовать команду mv для тех же целей ($mv /dev/null emptyfile) 
не рекомендуется, из-за возможных последующих сбоев системы.

6 способ

С помощью команды копирования данных dd:
$dd if=/dev/null of=emptyfile
для нескольких пустых файлов:
$dd if=/dev/null of=emptyfile>emptyfile2>emptyfile3

7 способ

Нестандартный способ, с помощью стандартной утилиты tee:
$tee emptyfileemptyfile2>emptyfile3

8 способ

Еще один оригинальный с помощью утилиты вызова командного интерпретатора shell – sh:
$sh>emptyfile exit
а можно и так:
$sh>emptyfileemptyfile>emptyfile2>emptyfile3 exit

9 способ

И, конечно же, пустой файл можно создать с помощью стандартных текстовых редакторов, 
которых напихано в никсах, больше чем звезд на небе :). Но запускать редактор только для того, 
чтобы создать пустой файл как-то нерационально, поэтому с редактором vi, 
например, нужно поступать следующим образом:
$vi –c :wq emptyfile
Аналогично с редактором ex:
$ex –c :wq emptyfile
и для создания нескольких пустых файлов:
$vi –c :wq emptyfile>emptyfile2>emptyfile3
$ex –c :wq emptyfile>emptyfile2>emptyfile3
А вот как следует обходиться с двумя родственными редакторами ed и red:
ed>emptyfileemptyfileemptyfile>emptyfile2>emptyfile3emptyfile>emptyfile2>emptyfile3

10 способ

Последний способ не относится к чисто консольным, т. к. принадлежит народному файловому менеджеру mc. 
Для тех, кто не хочет утруждать себя лишним набором команд: в mc достаточно 
нажать комбинацию Shift+F4 с последующим сохранением.
Рубрики
Текст \ Файлы \ Папки

sort \ diff

dpkg-query -l | grep kernel | sort - отображает в прямом алфавитном порядке 
dpkg-query -l | grep kernel | sort -r - отображает в обратном алфавитном порядке  
                      
ps auwx | sort -r -k 4.4 - Следующая команда сортирует процессы по уровню использования 
                           памяти. Параметр к используется для указания поля, 
                           используемого для сортировки. 
                           Запись 4,4 показывает, что именно четвертое
                           поле (и только оно) является ключевым.

lsmod | sort -k 2,2n - команда отображает загруженные модули ядра в порядке 
                       увеличения их размера. Параметр n указывает команде sort 
                       на необходимость интерпретировать второе поле как номер, 
                       а не как строку.
                       
strings - Поиск текста в бинарных файлах.Иногда возникает необходимость прочесть текст 
          в кодировке ASCII, находящийся внутри бинарного файла, 
          что позволяет узнавать много информации об исполняемом файле.
 
strings /bin/ls | grep *i libc - Определяет наличие libc в ls 
cat /bin/ls| strings - отображает все тексты ASCII в ls
strings /bin/ls  - отображает все тексты ASCII в ls

diff config config.old - определение различий между двумя файлами config и config.old
diff -u f1.txt f2.txt > patchfile.txt - сравнения двух файлов f1 и f2, и
                                        найденные отличия записали в patchfile.txt.
patch f1.txt < patchfile.txt - используя файл сравнения patchfile.txt patching file f1.txt

awk - мощным инструментом редактирования текста
      представляет собой полноценный язык программирования

ps auwx | awk '{print $1.$11}’	- отображает столбцы 1 и 11 команды ps
ps auwx | awk '/user_name1/ {print $11}' - отображает процессы пользователя user_name1
ps auwx | grep user_name1 | awk '{print $11}' - отображает процессы пользователя user_name1

awk -F: '{print $1.$5}' /etc/passwd  - -F: в качестве знака-разделителя для отображения 
                                       столбцов устанавливается двоеточие.

cut -d: -f1-5 /etc/passwd	- cut также может быть использована при работе с несколькими
                              полями значений . В качестве знака-разделителя для отображения
                              столбцов устанавливается двоеточие
                              отображает столбцы 1-5 файла /etc/passwd