linux的管道可以用于linux程序之间,linux命令之间以及linux程序和命令之间的通信。
在shell中使用管道的格式:
command1 | command2 | command3
代表command1的标准输出作为command2的标准输入使用,而command2的标准输出又作为command3的标准输入使用。
实例1:
匹配字符串中的linux:
echo "hello,linux" | grep "linux"
重定向
重定向输入的格式为:
[n] < file
表示将输入从文件描述符为n的文件重定向到file。
重定向输出的格式为:
[n] > file
表示将输出文件描述符为n的文件重定向到file。
实例1:
使用管道符将test1的内容作为标准输入,输出到test2中。
cat test1 | cat > test2
实例2:
通过重定向将test1的内容作为标准输入,重定向到test3中:
cat > test3 < test1
实例3:
查看一个当前目录下不存在的文件test4,将给出的错误信息重定向到test5中:
ls test4 |& cat > test5
tee:用于读取标准输入,并将其写入到标准输出和文件中
- -a:附加到已有文件内容的后面,而不是覆盖
- -i:忽略中断信号
实例1:
把tets1的内容写入到test2中
tee test1 test2
实例2:
把当前文件夹下的文件列表打印到out.txt中
ls | tee out.txt
排序
sort:用于将文本内容以行为单位进行排序
参数:
- -u:去除重复行
- -t:指定分隔字符
- -o:输出到指定文件
- -t:设置行中的分隔符,默认为空格
- -k:指定使用某一行进行排序
- -r:修改默认的升序排序为降序
实例:
使用test1中的年龄进行排序,并保存到test2中
sudo vim test1
liuyi man 30
wanger man 22
zhangsan women 30
lisi wowen 18
:wq
sort -k 3 -o test2 test1
合并
paste:将多个文件以列对列的方式加以合并
实例:
sudo vim num1
1
2
:wq
sudo vim let1
a
b
c
:wq
paste num1 let2
join:将多个文件中有相同特征的行以类似于paste的方式进行组合。
实例:
sudo vim file1
a 1
b 2
e 5
:wq
sudo vim file2
a X
e Y
f Z
:wq
join file1 file2
tr:将标准输入复制到标准输出,在这个过程中可以执行转译或删除操作。
tr set1 [set2]
set1:表示需要转换的或者删除的原字符集。
set2:表示为转换的目标字符集
实例:
将打印到标准输入的helloworld的小写字母全部转换成大写字母:
echo "helloworld" | tr a-z A-Z
xargs:可以从标准输入构建和执行命令
- -a:使用该参数指定从文件中读取,而不是标准输入
- -d:自定义定界符
- -n:每行的最多参数个数