Текст и потоки
Поиск, фильтрация, замены, колонки и пайпы.
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.tsvsed и 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`.