5.2 管道
管道命令可以将多条命令组合起来,一次性完成复杂的处理任务。
语法: command1 | command2 | command3...
例: 查看passwd中最后3行内容。
cat /etc/passwd | tail -3
查看passwd中包含root所在行的第一条信息。
cat /etc/passwd | grep "root" | head -1
5.2.1 tee
用于读取标准输入的数据,并将其内容输出成文件。 tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
tee
命令的基本语法如下:
tee [-ai][文件...]
参数说明:
-
-a或--append 附加到既有文件的后面,而非覆盖它.
-
-i或--ignore-interrupts 忽略中断信号。
例:
将cat查看结果放到文件file1.txt中,并在终端显示最后一行。
cat /etc/passwd | tee file1.txt | tail -1 cat file1.txt
查看passwd中包含root所在行的信息,并将其结果放入file1.txt中
cat /etc/passwd | grep "root" | head -l cat /etc/passwd | grep "root" | tee file1.txt
使用指令"tee"将用户输入的数据同时保存到文件"file1"和"file2"中。
tee file1 file2 #在两个文件中复制内容
同时打印到屏幕和文件里。
ls -l | tee -a file1.log
把错误输出也同时打印到屏幕和文件。
ls -l not_find_runoob 2>&1 | tee -a file1.log # 2>&1 意思就是把标准报错也作为标准输出
5.2.2 xargs
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。 xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。 xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。 xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。 xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令
xargs
命令的基本语法如下:
command | xargs -item command
参数说明:
-
-a file 从文件中读入作为 stdin
-
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-
-p 当每次执行一个argument的时候询问一次用户。
-
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-
-t 表示先打印命令,然后再执行。
-
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-
-L num 从标准输入一次读取 num 行送给 command 命令。
-
-l 同 -L。
-
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-
-x exit的意思,主要是配合-s使用。
例1:
创建文件file1-5
touch /root/data1/file{1..5}
在文件files.txt中写入以下内容
/root/data1/file1 /root/data1/file3 /root/data1/file5
删除files.txt文件中指定路径的文件
cat files.txt | rm -rvf ls /root/data1 # 无法执行成功
cat files.txt | xargs rm -rvf ls /root/data1 # 成功删除
例2:
xargs 用作替换工具,读取输入数据重新格式化后输出。
定义一个测试文件,内有多行文本数据:
cat test.txt a b c d e f g h i j k l m n o p q r s t u v w x y z
多行输入单行输出:
cat test.txt | xargs a b c d e f g h i j k l m n o p q r s t u v w x y z
-n 选项多行输出:
cat test.txt | xargs -n3 a b c d e f g h i j k l m n o p q r s t u v w x y z
-d 选项可以自定义一个定界符:
echo "nameXnameXnameXname" | xargs -dX name name name name
结合 -n 选项使用:
echo "nameXnameXnameXname" | xargs -dX -n2 name name name name