$ command-helper

grep, sed, awk и компания

Поиск по тексту, замена в файлах, выборка колонок, сортировка и подсчёт.

Потребуется вход через Google

grep

Рекурсивный поиск с номерами строк
grep -rn '<pattern>' <path>
Поиск без учёта регистра
grep -i '<pattern>' <file>
Строки, которые НЕ совпадают
grep -v '<pattern>' <file>
Показать по 3 строки контекста вокруг совпадений
grep -C 3 '<pattern>' <file>
Только имена файлов с совпадениями
grep -rl '<pattern>' <path>
Расширенный regex с несколькими вариантами
grep -E 'error|warn|fatal' <file>
Быстрый поиск с учётом .gitignore (ripgrep)
rg '<pattern>'

sed

Заменить текст в файле на месте
sed -i 's/<old>/<new>/g' <file>

На macOS: sed -i '' 's/old/new/g' file

Вывести строки с 10 по 20
sed -n '10,20p' <file>
Удалить строки по шаблону
sed -i '/<pattern>/d' <file>
Замена во всех файлах проектапродвинутая
grep -rl '<old>' <path> | xargs sed -i 's/<old>/<new>/g'

awk

Вывести первую колонку
awk '{print $1}' <file>
Другой разделитель (CSV)
awk -F',' '{print $2}' <file>
Сумма по колонкепродвинутая
awk '{sum += $3} END {print sum}' <file>
Строки, где значение в колонке больше порогапродвинутая
awk '$3 > 100' <file>

Сортировка и подсчёт

Посчитать строки
wc -l <file>
Уникальные строки с количеством, самые частые сверху
sort <file> | uniq -c | sort -rn | head
Топ IP в access-логе nginxпродвинутая
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
Вырезать 2-е поле с разделителем «:»
cut -d ':' -f 2 <file>
Сравнить два файла
diff -u <file1> <file2>

Пайпы и перенаправление

Записать stdout и stderr в файл
<command> > output.log 2>&1
Показать вывод и одновременно сохранить в файл
<command> | tee output.log
Выполнить команду для каждой строки вводапродвинутая
cat <file> | xargs -I {} echo "item {}"