⑴要在当前目录中按名称定位文件,find 。 -iname ’*something*‘(或者相类似的。要按名称查找任何地方的文件,使用 locate something(但请记住,updatedb 可能还没有索引最近创建的文件。
⑵对于源代码或数据文件进行的常规搜索(要比 grep -r 更高级,使用 ag。
⑶要将 HTML 转成文本:lynx -dump -stdin。
⑷对于 Markdown、HTML,以及各种类型的文档转换,可以试试 pandoc。
⑸如果你必须处理 XML,xmlstarlet 虽然有点老旧,但是很好用。
⑹对于 JSON,使用jq。
⑺对于 Excel 或 CSV 文件,csvkit 提供了 incsv,csvcut,csvjoin,csvgrep 等工具。
⑻对于亚马逊 S ,scmd 会很方便,而 scmd 则更快速。亚马逊的 aws 则是其它 AWS 相关任务的必备。
⑼掌握 sort 和 uniq,包括 uniq 的 -u 和 -d 选项——参见下面的单行程序。
⑽掌握 cut,paste 和 join,它们用于处理文本文件。很多人会使用 cut,但常常忘了 join。
⑾了解 tee,它会将 stdin 同时复制到一个文件和 stdout,如 ls -al | tee file.txt。
⑿知道 locale 会以微妙的方式对命令行工具产生大量的影响,包括排序的顺序(整理以及性能。大多数安装好的 Linux 会设置 LANG 或其它 locale 环境变量为本地设置,比如像 US English。但是,你要明白,如果改变了本地环境,那么排序也将改变。而且 in 过程会让排序或其它命令的运行慢好多倍。在某些情形中(如像下面那样的设置操作或唯一性操作,你可以安全地整个忽略缓慢的 in 过程,然后使用传统的基于字节的排序顺序 export LC_ALL=C。
⒀了解基本的改动数据的 awk 和 sed 技能。例如,计算某个文本文件第三列所有数字的和:awk ’{ x += $ } END { print x }‘。这可能比 Python 的同等操作要快倍,而且要短倍。
⒁在一个或多个文件中,替换所有出现在特定地方的某个字符串:
⒂perl -pi.bak -e ’s/old-string/new-string/g‘my-files-*.txt
⒃要立即根据某个模式对大量文件重命名,使用 rename。对于复杂的重命名,repren 可以帮助你达成。
⒄# 恢复备份文件 foo.bak -》 foo:
⒅rename ’s/.bak$//‘*.bak
⒆# 完整的文件名、目录名 foo -》 bar:
⒇repren --full --preserve-case--from foo --to bar 。
⒈使用 shuf 来从某个文件中打乱或随机选择行。
⒉了解 sort 的选项。知道这些键是怎么工作的(-t和-k。特别是,注意你需要写-k,来只通过第一个字段排序;-k意味着根据整行排序。
⒊稳定排序(sort -s会很有用。例如,要首先按字段排序,然后再按字段排序,你可以使用sort -k, | sort -s -k,
⒋如果你曾经需要在 Bash 命令行中写一个水平制表符(如,用于 -t 参数的排序,按ctrl-v [Tab],或者写$’ ‘(后面的更好,因为你可以复制/粘贴。
⒌对源代码进行补丁的标准工具是 diff 和 patch。 用 diffstat 来统计 diff 情况。注意 diff -r可以用于整个目录,所以可以用 diff -r tree tree | diffstat 来统计(两个目录的差异。
⒍对于二进制文件,使用 hd 进行简单十六进制转储,以及 bvi 用于二进制编辑。
⒎还是用于二进制文件,strings(加上 grep 等可以让你找出一点文本。
⒏对于二进制文件的差异(delta 压缩,可以使用 xdelta。
⒐要转换文本编码,试试 iconv 吧,或者对于更高级的用途使用 uconv;它支持一些高级的 Unicode 的东西。例如,这个命令可以转换为小写并移除所有重音符号(通过扩展和丢弃:
⒑uconv -f utf--t utf--x ’::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] 》; ::Any-NFC; ‘《 input.txt 》 output.txt
⒒要将文件分割成几个部分,来看看 split(按大小分割和 csplit(按格式分割吧。
⒓使用 zless,zmore,zcat 和 zgrep 来操作压缩文件。