#!/bin/bash

 

-Вывод строк с 15 по 35:

# cat log.txt | sed -n 15,35p

 

-В директории /home/test найти файлы старше 7 дней и удалить:

# find /home/test -mtime +7 -exec rm -rf {} \;

 

-Посчитать сумму столбца

cat sec | awk '{ SUM += $4 } END {print SUM}'

 

-Задача для cron:

00 12 * * * root find /home/test -mtime +7 -exec rm -rf {} \;

 

-Отложить действие можно командой sleep:

sleep 1.5s
echo test
sleep 5s

можно указывать s(seconds),m(minutes),h(hours),d(days)

 

-Проверка кода выполнения предыдущей команды:

#!/bin/bash
cat ./testlist |grep -xc test_var > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo ERROR
else
echo OK
fi

 

-После выполнения скрипта можно задать вопрос на повторное выполнение:

read -p "Completed. Run again for other user (y/n)? " REPLY
if [[ $REPLY =~ ^[Yy]$ ]]; then exec $0; else echo STOP; fi

 

-Проверить введена ли переменная:

echo "Enter the first time"
read THEDATE1
if [ -z "$THEDATE1" ]; then echo "ERROR, Variable not entered" && exit 0; fi

 

-Проверить формат введенной даты:

read THEDATE2
if [[ ! "$THEDATE2" =~ ^[0-9]{2}/[0-9]{2}/[0-9]{4}$ ]]; then echo "ERROR, invalid date format, use format: mm/dd/yyyy" && exit 0; fi

В данном случае мы проверяем чтобы формат введенной даты соответствовал - mm/dd/yyyy

 

-Отобразить переменную зеленым цветом:

echo -e "\e[32m$SHELL\e[0m"

 

-Удалить расширение файла:

cat files.txt| cut -d'.' -f1,2

 

-Вставить текст в файл:

sudo sh -c 'cat << EOF >> file_name
TEXT HERE
EOF'

или:
printf "hello > fsdf > dsf > > fsfd > > dsff > " > file_name

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SED

-Поставить символ # в начало строки, содержащей текст:

# sed -i '/текст/s/^/#/' файл

 

-Убрать символы # в начале строки, содержащей текст:

# sed -i '/текст/s/^#\+//' файл

 

-Поставить символ # в начало строки, содержащей текст, и начинающейся не с символа #:

# sed -i '/^[^#].*текст/s/^/#/' файл

 

-Удалить все строки включительно до слова keyword:

# sed '1,/keyword/ d' < file

 

-Удалить все строки включительно начиная со слова FILTERS_OUT:

# sed '/FILTERS_OUT/,$ d' < file

 

-В начале строки, где есть слово require добавить кавычку('):

# sed /require/s/^/\'/

 

-В конце строки, где есть слово require добавить кавычку('):

# sed /require/s/$q/\'/

 

-В строках множественные пробелы заменить одной запятой:

# sed 's/\s\+/,/' cut.txt

 

-Выполнить несколько действий подряд(ключ -e):

# sed -e '/FILTERS_OUT/,$ d' -e 1,1d -e /require/s/^/\'/
или:
# sed -e 's/This/That/; s/test/another test/' ./myfile

 

-Удалить текст строки до слова zimbraMailSieveScript:

# sed 's/^zimbraMailSieveScript: //'

 

-Добавить слово GHJ в конец каждой строки:

# sed s/$/GHJ/g

 

-Добавить в конец файла "[mounts]" затем перенос на новую строка и "user root".

# sed -i '$ a \\n[mounts]\nuser root' /etc/munin/config 

 

-Показать нечетные строки в файле:

# awk 'NR%2==0' file
или:
# sed ' n; d' file

 

-Показать четные строки:

# sed '1d; n; d' file

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Сравнение файлов


-Сравнить 2 файла побайтово:

# cmp -s zeromail1.txt zeromail3.txt && echo good

 

-Сравнить 2 файла построчно(вывести уникальные строки обоих файлов):

# comm -3 list1 list2

 

-Вывести уникальные строки из первого файла:

# comm -2 -3 list1 list2

 

-Вывести уникальные строки из второго файла:

# comm -1 -3 list1 list2

 

-Сравнить 2 файла построчно:

# diff -y --suppress-common-lines list1 list2

 

-Сравнить первый файл list1 c list2 и вывести строки, которых нет в list1:

# fgrep -v -f list1 list2