Linux中的管道命令(一)

cat

cat程序将数据不加改变的复制到标准输出,数据可以来自于标注输入,也可以来自于文件。

下面的程序将输出hello.txt文件的内容:

$ cat hello.txt

cat命令常被用作组合多个文件,下面的命令将hello.txtsource.list.bk文件的内容组合保存到bk.txt中:

$ cat hello.txt source.list.bk > bk.txt

split

使用cat可以组合文件,使用split可以分割文件。

split默认将文件每1000行存为一个新文件,如果最后一次分割后剩余的不足1000行,则将剩余的行作为一个文件,也可以使用-l命令选项指定每个新文件的行数:

$ split -l 4 bk.txt

上面的命令将bk.txt文件每4行分割为一个新文件,bk.txt文件共15行,因此生成4个文件(前三个每个都是4行,最后一个是3行),其名字依次为xaaxabxacxad

split生成的新文件的默认名字为xaaxabxac……,使用-d选项指定使用数字作为新文件名后缀,默认是两位数字,还可以在文件名后面指定新文件的文件名前缀:

$ split -d -l 4 bk.txt source

生成的四个文件的文件名为source00source01source02source03

使用-a选项指定数字或者字母后缀的位数,下面的命令指定使用数字后缀且数字位数为3位:

$ split -d -a 3 -l 4 bk.txt source_

生成的四个文件的文件名依次是:source_000source_001source_002source_003

tac

tac逆序输出每一行:

$ cat output
li
qian
sun
wang
wu
zhao
zheng
zhou
$ tac output
zhou
zheng
zhao
wu
wang
sun
qian
li

rev

rev对每一行的内容进行逆序输出:

$ cat output
li
qian
sun
wang
wu
zhao
zheng
zhou
$ cat output | tac
zhou
zheng
zhao
wu
wang
sun
qian
li
$ cat output | tac | rev
uohz
gnehz
oahz
uw
gnaw
nus
naiq
il

head, tail

head默认显示文件的前10行内容,tail默认显示文件的最后10行内容。

它们都可以使用-n指定显示的行数:

$ head -n 2 bk.txt
Hello, vim!ello
Hello, vim!Hello
$ tail -n 5 bk.txt
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse

cut

cat命令在每行信息中进行切割。

下面是$PATH变量的内容:

$ echo $PATH
/home/tom/bin:/home/tom/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

在该变量中,每一个目录项由:进行分割,第1个目录项是/home/tom/bin,第2个目录项是/home/tom/.local/bin……

cut命令使用-d '字符'选项即可使用指定的字符进行切分,使用-f选项即可指定分割后要保留的部分:

$ echo $PATH | cut -d ':' -f 1,3
/home/tom/bin:/usr/local/sbin

上面的语句中,cut使用:$PATH变量进行了切分,并且保留了其第1和第3项。

对于下面这样很“整齐”的文件:

$ cat source.list.bk
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse

还可以对cut使用-c命令选项指定截取的字符,比如cut -c 2-4表示截取每行的第2-4个字符。下面的命令截取每行的39至最后一个字符:

$ cat source.list.bk | cut -c 39-
xenial main restricted universe multiverse
xenial-security main restricted universe multiverse
xenial-updates main restricted universe multiverse
xenial-proposed main restricted universe multiverse
xenial-backports main restricted universe multiverse

留下评论

电子邮件地址不会被公开。 必填项已用*标注