Текст и потоки

Поиск, фильтрация, замены, колонки и пайпы.

grep

Искать строки в логах и конфигах. Для рекурсивного поиска удобен `rg`, если установлен.

grep -n "error" /var/log/syslog
grep -R "listen" /etc/nginx
grep -i "failed" /var/log/auth.log
grep -v "debug" app.log
rg "server_name" /etc/nginx

sort, uniq, wc

Быстро посчитать повторения, строки и самые частые значения.

wc -l access.log
sort access.log | uniq -c | sort -nr | head
cut -d ' ' -f 1 access.log | sort | uniq -c | sort -nr | head
tail -n 1000 access.log | wc -l
comm -12 file1.txt file2.txt

awk и cut

`cut` проще для разделителей, `awk` удобнее для условий и форматирования.

awk '{print $1}' access.log
awk '$9 >= 500 {print $0}' access.log
awk -F: '{print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
column -t file.tsv

sed и tr

Для массовых замен сначала выводить результат на экран, а уже потом использовать `-i`.

sed -n '1,80p' file.conf
sed 's/old/new/g' file.conf
sed -i.bak 's/old/new/g' file.conf
tr -d '\r' < windows.txt > linux.txt
tr '[:upper:]' '[:lower:]' < names.txt

xargs и jq

`xargs` передаёт список в команду, `jq` разбирает JSON без ручного копания.

find . -name "*.log" -print0 | xargs -0 grep -n "error"
printf '%s\n' file1 file2 | xargs -I{} ls -lh {}
curl -s https://api.ipify.org
curl -s https://api.github.com | jq .
jq '.clients[] | .clientName' amnezia-status.json

Что искать дальше

Полезные запросы: `awk examples`, `sed in place backup`, `xargs print0`, `jq filter array`.