单行脚本
·
格陵兰船长
单行脚本
一些命令组合的例子:
- 当你需要对文本文件做集合交、并、差运算时,
sort和uniq会是你的好帮手。具体例子请参照代码后面的,此处假设a与b是两内容不同的文件。这种方式效率很高,并且在小文件和上 G 的文件上都能运用(注意尽管在/tmp在一个小的根分区上时你可能需要-T参数,但是实际上sort并不被内存大小约束),参阅前文中关于LC_ALL和sort的-u参数的部分。
sort a b | uniq > c # c 是 a 并 b
sort a b | uniq -d > c # c 是 a 交 b
sort a b b | uniq -u > c # c 是 a - b
-
使用
grep . *(每行都会附上文件名)或者head -100 *(每个文件有一个标题)来阅读检查目录下所有文件的内容。这在检查一个充满配置文件的目录(如/sys、/proc、/etc)时特别好用。 -
计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍):
awk '{ x += $3 } END { print x }' myfile
- 如果你想在文件树上查看大小/日期,这可能看起来像递归版的
ls -l但比ls -lR更易于理解:
find . -type f -ls
- 假设你有一个类似于 web 服务器日志文件的文本文件,并且一个确定的值只会出现在某些行上,假设一个
acct_id参数在 URI 中。如果你想计算出每个acct_id值有多少次请求,使用如下代码:
egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn
-
要持续监测文件改动,可以使用
watch,例如检查某个文件夹中文件的改变,可以用watch -d -n 2 'ls -rtlh | tail';或者在排查 WiFi 设置故障时要监测网络设置的更改,可以用watch -d -n 2 ifconfig。 -
运行这个函数从这篇文档中随机获取一条技巧(解析 Markdown 文件并抽取项目):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README-zh.md|
pandoc -f markdown -t html |
iconv -f 'utf-8' -t 'unicode' |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
xmlstarlet unesc | fmt -80
}