Skip to content

Linux Bash

harryfyodor edited this page Apr 8, 2019 · 1 revision

本篇笔记会记录Linux的管道命令相关内容。方便日后查询使用。

主要参考了:

1 获取命令

1.1 cut

行内切割

cut -d '分隔符' -f field
# 把前面输入的内容按照分隔符切开,选择第`field`个。
cut -c 字符区间
# 把每一行的截取一段区间的内容予以保留。

1.2 grep

搜索行,如果符合要求则打印出来

grep [-acinv] [--color=auto] '搜索的串' filename
-a 把二进制档案按照text方式进行搜索
-c 计算找到的次数
-i 忽略大小写
-n 输出行号
-v 反向搜索,即,没有包含搜索串的被打印出来
--colo=auto 关键字加色

2 排序命令

2.1 sort

排序

sort [-fbMnrtuk] [file or stdin]
-f: 忽略大小写
-b: 忽略行首空格
-M: 月份名字排序(eg. JAN, DEC)
-n: 数字排序(整个数从小到大)
-r: 反向排序
-u: 除去重复 (uniq)
-t: 分隔符(默认为tab)
-k: 需要进行排序的区间(与-t配合使用)

示例:

sort -t ':' -k 3 #按照以‘:’分割的第三列及其后排序(把第三列开始到后面看成一个整体)
sort -t ':' -k 3,3 #按照以‘:’分割的第三列排序(仅仅看第三列)

2.2 uniq

去重(只会处理相邻行之间的重复,要先排好序)

uniq [-ic]
-i: 忽略大小写
-c: 计数

2.3 wc

统计行、字数(单词数)、字符数

wc [-lwm]
-l: 行数
-w: 字数(单词数,words)
-m: 字符数

3 双重重定向

3.1 tee

同时把输入输送到屏幕中显示,并且保存到文件里面。保存文件这一点很方便。

tee [-a] file
-a 以累加的形式加入file重

4 字符转换

4.1 tr

替换,删除

tr [-ds] SET1 ...
-d: 删除 SET1 匹配的内容
-s: 替换重复字符 SET1 为单个 SET2
# 直接 tr '[a-z]' '[A-Z]' 可以进行大小写转换。

4.2 col,expand

tab 换成空格

col [-xb]
-x: tab 换成空格(一般8个)
expand [t] file
-t: 每个 tab 换成多少空格
(unexpand: 把空格换成 tab)

5 拼接和分割

5.1 join

在join之前一般先进行sort。

join [-ti12] file1 file2
-t: 分隔符(默认空格)作用是按照分隔符划分开,如果两个文件第一个栏相同,则以这一栏为开头,后面的部分拼接。
-i: 忽略大小写
-1: 用第一个文件的哪一栏来对比(默认是第一个文件的第一栏)
-2: 用第二个文件的哪一栏来对比

5.2 paste

直接每行拼起来。

paste [-d] file1 file2
-d: 分隔符(默认用tab分隔)

5.3 split

大文件分割成小文件

split [-bl] file PREFIX
-b: 按文件大小分割
-l: 按行数分割
PREFIX: 分割后文件名的前导字符
#(合并档案,把相同开头的文件合并成一个:cat PREFIX* >> PREFIXwhole)

6 参数代换

6.1 xargs

让我们通过xargs,使得不支持管道命令的命令可以使用管道的功能。

从标准输入产生命令的参数来调用命令。

xargs [-0epn] command
-0: 还原特殊字符(如`,\,空格等)
-e: EOF,当遇到这个字符串时停止
-p: prompt,每执行一次,就询问一次。执行次数由-n参数决定。
-n: 每次传参数的个数(按照这个参数数量多次调用命令)

例子

cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id

7 文本处理

7.1 sed

Clone this wiki locally