真正玩明白Linux文本处理,从来不是靠单个命令,而是命令之间的组合。管道符就是最好的黏合剂,把前一个命令的输出当成后一个命令的输入,一路下来直接得到你想要的结果。
比如你想要看当前目录下所有log文件里,有多少个error,怎么弄?grep -r "error" *.log | wc -l,就这一句话,结果直接出来。想要找出最近一小时内日志里出现过error的文件,再结合find命令,find ./ -name "*.log" -mmin -60 | xargs grep "error",直接给你列出来。
xargs这个小东西真的是宝藏,很多命令不支持管道传参数,用xargs就能把标准输入转成命令行参数,完美解决问题。比如你找到所有log文件,批量压缩,find ./ -name "*.log" | xargs gzip,一下子全部压好,不用你一个个操作。
很多人会忽略掉进程替换这个玩法,比如你想要对比两个过滤之后结果的区别,不用生成临时文件,diff <(grep "error" log1) <(grep "error" log2),直接出对比结果,省得你还要删临时文件,干净又方便。
处理配置文件的时候,经常要去掉注释和空行,怎么弄?cat nginx.conf | grep -v "^#" | grep -v "^${paragraph}quot;,干净的配置内容直接出来,看起来不要太舒服。
其实这些技巧说难也不难,无非就是用得多了,自然就知道什么场景用什么命令,怎么组合最方便。很多新手总想着一下子把所有命令参数都背下来,其实完全没必要,用到的时候查一下,用多了自然就记住了。
Linux文本处理的魅力,就在于你可以用短短几行命令,搞定很多图形界面软件都搞不定的大文件处理。不用等加载,不用怕卡死,输入命令回车就出结果,那种流畅感,用过一次就再也回不去了。哪怕你只是日常处理一下日志,整理一下数据,学几个常用命令,都能帮你省下大把的时间,把精力花在更重要的事情上。