Skip to content

Linux 神奇的 shell 命令

为什么推荐 linux 的 shell,是因为在工作中使用 shell 清洗几百 G 的日志,可以很高效的完成,
可以少些很多的代码。

Grep 文件查找

-P 正则匹配 perl-regexp style

-v 和 -o 正好相反,-v 取反,不包含的行,-o 这是选择匹配中的元素

--color, -c 高亮配置的元素

-c 匹配的个数

-A after, -B before, -C after and before,显示匹配中的前几行,后几行,前后几行

待补充

sed 替换

bash
echo 123 | sed 's/2/4/g'

awk

bash
awk [-F field-separator] 'commands' input-file(s)

echo -e "a\tb\tc" | awk '{print $1}'

-F -F"\t" -F"b" 切分标志,支持正则表达式

commands 支持条件控制

sort

-n, -r, -k

如何逐行读取

bash
cat test.txt | while read LINE; do
    echo ${LINE}
done

jq Command-line JSON processor

bash
cat 1.json | jq '.'
# prety print
{
  "test": "xxxx",
  "bb": [
    {
      "ccccc": 2
    }
  ]
}

cat 1.json | jq '.test'
# xxxx

cat 1.json | jq '.bb[0].ccccc'
# 2

Demo

bash
#!/usr/bin/env bash

for f in $(ls request-*); do
	echo ${f}
	gunzip -c ${f} > request.log
	grep '/api/room/singers' request.log | grep '\[\]\t{[^}]+}' -Po | sed 's/\[\]\t//g' >> singer.log
	:> request.log
done

grep -P '(wangsu|rtmp)' callback.log |grep  -Po '{.+\[\]' | sed 's/ \[\] \[\]//g' > callback.json.log

grep MIC_SINGER_CHANGED im.log | grep -Po '{.+\[\]' | sed 's/ \[\]//g' > im.json.log