Регулярные выражения
символы:
X = символ `X’
. = один любой символ
[...] = один символ из множества
повторители:
* = любое
количество символов
+ = один
и более символов
? = один
или ноль символов
{m} = ровно m символов
{m,n} = от m до n символов
Именованные
регулярные выражения:
помечаются скобками: \(…\)
обращаться к ним можно через их порядковый
номер: \1, \2 и т.д.
bash
перенаправление потоков ( > , < , >> ), конвейры ( | )
вставка результата стандартного потока вывода в командную строку ( `...` )
zip `date +'arch-%d-%m-%y'` *
переменные (локальные и экспортируемые); массивы
циклы for:
for i in *.c ; do
echo mv $i ${i}pp ; done
for((i=0;i<10;i++))
; do echo $i ; done
арифметические
выражения: $[ ... ]
логические
выражения: [[ ... ]]
Пример программы сортировки в bash
n=0
for x in `cat t.t`
do
m[$n]=$x
n=$[ $n + 1 ]
done
echo $n
for((i=0;i<$n;i++))
do
for((j=1;j<$n;j++))
do
if [[ ${m[$j]} -lt
${m[$[ $j - 1 ]]} ]]
then
t=${m[$j]}
m[$j]=${m[$[ $j - 1 ]]}
m[$[ $j - 1 ]]=$t
fi
done
done
for x in ${m[*]} ; do echo $x ; done
Поиск файлов:
locate
updatedb
whereis
find
find /usr/include -name stdio.h -print
grep egrep sed awk
Переименование *.с → *.cpp:
for i in *\.cpp ; do echo mv $i `echo $i | sed 's/^\(.*\)pp$/\1/'` ;
done
Замена имени переменной в C-программе:
cat t.c | sed
's/\([^a-zA-Z0-9_]\)a\([^a-zA-Z0-9_]\)/\1X\2/g'
Распечатка второго столбца массива из файла:
awk '{for(i=1;i<=NF;i++)printf("%s ",$i+1);printf("\n");}'
q.q
Сколько раз какие слова
встречаются в файле:
awk '{for(i=1;i<=NF;i++)m[$i]++;} END{for(i in m)printf("m[%d]='%s'\n",i,m[i])}' q.q