Краткий обзор работы в командной строке UNIX.

Регулярные выражения

символы:

 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