新学的bash小技巧

本周遇到不少线上的问题, 由于手生, 花了不少时间, 这里重新记录一下.

将多行合并成一行

之前经常用到的是用xargs. 通常是利用find找到对应的文件, 然后整成一行: find . | xargs. 不过这次是需要将对应的行使用逗号分隔, 这个用xargs就搞不定了, 需要使用paste: find . | paste -sd ',' -

比较两个文件, 找出在一个文件中而不在另一个文件中的行

很常见的一个需求, 但是花了不少时间. 答案是comm. 将两个排好序的文件comm一下会输出三列, 分别代表仅在第一文件中的, 两个文件都出现过的, 仅在第二个文件中的. 一般会通过-123参数来取消某列的输出, 达到需要的效果

1
2
## 找出只在第一个文件中出现的
comm -23 file1 file2

打印文件的第n到m行

使用sed. 这个指令对我来说已经有点陌生了.

1
2
## 打印第二到第三行
ls -l | sed -n '2,3p;4q'

最后

工具长时间不用真的会生疏不少, 幸好搜索能力还在;) 还记得之前刚上手学Linux的时候, 各种指令各种学. 现在重新翻翻书架上的《Linux Shell 脚本攻略》还能收获不少