2024年10月Linux命令行的日常使用技术(3)

发布时间:

  ⑴要在当前目录中按名称定位文件,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 来操作压缩文件。