前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中的管道命令(一)

Linux中的管道命令(一)

作者头像
mwangblog
发布2018-07-04 11:26:54
2.2K0
发布2018-07-04 11:26:54
举报
文章被收录于专栏:mwangblogmwangblog

Linux中的管道命令(一)

本文目录

  • 1 cat
  • 2 split
  • 3 tac
  • 4 rev
  • 5 head, tail
  • 6 cut

cat

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

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

代码语言:javascript
复制
$ cat hello.txt

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

代码语言:javascript
复制
$ cat hello.txt source.list.bk > bk.txt

split

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

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

代码语言:javascript
复制
$ split -l 4 bk.txt

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

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

代码语言:javascript
复制
$ split -d -l 4 bk.txt source

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

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

代码语言:javascript
复制
$ split -d -a 3 -l 4 bk.txt source_

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

tac

tac逆序输出每一行:

代码语言:javascript
复制
$ cat output
li
qian
sun
wang
wu
zhao
zheng
zhou
$ tac output
zhou
zheng
zhao
wu
wang
sun
qian
li

rev

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

代码语言:javascript
复制
$ 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指定显示的行数:

代码语言:javascript
复制
$ 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变量的内容:

代码语言:javascript
复制
$ 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选项即可指定分割后要保留的部分:

代码语言:javascript
复制
$ echo $PATH | cut -d ':' -f 1,3
/home/tom/bin:/usr/local/sbin

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

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

代码语言:javascript
复制
$ 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至最后一个字符:

代码语言:javascript
复制
$ 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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux中的管道命令(一)
    • cat
      • split
        • tac
          • rev
            • head, tail
              • cut
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档