shell学习笔记(三)

双向重导向
tee

tee -a file能将数据流分别输出到文件和屏幕中,到屏幕中的数据输出(stdout)就可以让下一个命令继续处理。
例:
last | tee last -a last.list | cut -d ’ ’ -f 1

字符转换命令:tr、col、join、paste、expand
tr

tr [-ds] 字符串
-d 删除
-s 取代重复的字符
例:
last | tr -s [a-z] [A-Z] 将输出内容小写变成大写。
cat /etc/passwd | tr -d ':'将输出内容里面的:都删掉。

col

col [-x] 将输出内容里面的tab转换成空白键

join

join [-ti12] file1 file2对比2个文件(必须经过经过相同规则进行过排序),找出同一位置有相同的部分进行合并为一个,剩余部分在后面追加。
-t join默认以空字符分割剩余数据,-t可以指定分割的字符,例如使用:分割2段数据。
-i 忽略大小写
-1 数字1,代表第一个文件以那一段的数据进行对比
-2 代表第二个文件以那一段的数据进行对比
例:
A文件为学生姓名、学号

cat A
zhangsan 05
lisi 11
wangwu 21

B文件为学生姓名、成绩

cat B                   
zhangsan 78
lisi 82
wangwu 59

现在需要将学生的姓名、学号、对应的成绩合并一个文件里面。

join A B
zhangsan 05 78
lisi 11 82
wangwu 21 59
paste

paste -d file1 file2直接将2个文件内容以行进行连接,并以tab隔开。
-d 后面接分隔字符,默认是tab
- file部分写成- ,表示是来自stdin的数据

expand

expand -t file用于将tab转变成空格字符,-t后面接数字,一般一个tab为8个空格。

split

split [-bl] file 用于将一个文件以大小或行数来切割成几个文件。
-b 后面为切割的文件大小,可加单位,b、k、m
-l 以行数进行切割
例:
split -b 1000 A.txt ./learn_shell/A ;cd ~/learn_shell/;ll

xargs

xargs [-dpne0] command命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数
例一:

echo ‘–help’ | cat

--help                          <==输出

例二:
echo ‘–help’ | xargs cat

用法:cat [选项]... [文件]...
Concatenate FILE(s) to standard output.

如果没有指定文件,或者文件为"-",则从标准输入读取。

  -A, --show-all           equivalent to -vET
  -b, --number-nonblank    number nonempty output lines, overrides -n
  -e                       equivalent to -vE
  -E, --show-ends          display $ at end of each line
  -n, --number             number all output lines
  -s, --squeeze-blank      suppress repeated empty output lines
  -t                       与-vT 等价
  -T, --show-tabs          将跳格字符显示为^I
......

第一个例子中cat接受的是管道中过来的标准输出,然后将其显示出屏幕中。例二中xargs可以将管道传过来的–help转为cat的参数,所有输出的是cat --help。
xargs的选项:
-d xargs默认是以空格分割参数,-d可以指定分割参数的特殊符合。
例:
echo ‘11@22@33’ | xargs -d ‘@’ echo 指定@为分割参数符号

11
22
33

-p 可以在运行command前,会显示要执行的命令,并询问是否需要执行命令。
例:
echo ‘11’ | xargs -p kill

kill 11 ?...

-n 这个选项会根据-n后面的数字来决定要执行的命令每次接受多少个参数来运行。
例:
echo ‘11 22 33’ | xargs -n 2 echo echo命令会每次接受2个参数。

11 22
33

-e 当xargs解释到多个参数时,当运行到-e后面的参数时就会停止。
echo ‘11 22 33’ | xargs -e ‘33’ echo,命令运行到33时就会停止。

11
22

-0 等于-d ‘\0’,就是输出内容不换行。
实际中有很多命令不支持管道命令的stdin,如ls、rm、kill等,xargs就可以将接收到的stdin作为这些命令的参数来运行命令。比如我在学习中在家目录下建了很多类似123.txt的文件,我想把他们删掉可以这样:

find ~/ -name 123.txt | xargs -p rm
减号-的用途

在管道命令中,管道前命令产生的stdout可以作为管道后面命令的stdin,而-可以代替这个stdin。
例:
有一个123.txt的文件,内容是abc。

echo ‘123’ | cat 123.txt
abc

虽然echo ‘123’ 产生出stdout,但cat 的参数是123.txt所有输出的是abc。

echo ‘123’ | cat 123.txt -
abc
123

-就是cat的stdin,所有管道前的stdout也一并输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值