重定向
I/O重定向允许我们将命令的输入和输出重定向到文件中
输出重定向
标准错误是不能通过这个方式的
>
覆盖添加
echo abc > a.txt
>>
追加添加
echo 123 >> a.txt
注:以上只能将标准输出重定向到文件中,标准出错是不能通过此方式输出到文件
只需要在后面加上 2>&1 即可
./xxx> test.log 2>&1
输入重定向
<
查看文件内容
cat < data.txt
<<
创建多行文本
$ cat << EOF > message.txt
> Hello, this is a custom message!
> 你好
> EOF
管道
Linux所提供的管道符“|”将两个命令隔开
管道符左边命令的输出就会作为管道符右边命令的输入
连续使用管道意味着第一个命令的输 出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推
例如查看文件的行数
cat xxx.txt | wc -l
就是将 cat xxx.txt的输出作为wc -l 的输入
xargs命令
有些命令不支持管道符来传递参数
比如: 搜索/etc目录下的所有".conf"结尾的文件信息,然后以详细列表形式显示
find /etc -name "*.conf" | ls -l # 不支持
可以通过xargs就可以实现这个功能
find /etc -name "*.conf" | xargs ls -l
- -p 当每次执行一个argument的时候询问一次用户。
- -i 将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
cat a.txt | xargs echo
cat a.txt | xargs -i echo {}
grep
grep是一个可以利用”正则表达式”进行”全局搜索”的工具,grep会在文本文件中按照指定的正则进行全局搜索,并将搜索出的行打印出来
参数
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-c 计算符合范本样式的列数。
-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-G 将范本样式视为普通的表示法来使用。
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i 忽略字符大小写的差别
-v 反转查找。
测试文件
I aaam teacher
I aaaaaam student
I like Linux
I like JAVA
Hello World
世界,你好!
12312434
324828
fdjsoifjidosa
joijofids.
joijiodsf.
#jidfjisoaf
#fjidsfoijsdaifo
普通搜索
grep "L" test.txt
不区分大小写
grep -i "L" test.txt
输出i开头,并且不区分大小写的行
grep -i "^i" test.txt
-n代表显示匹配行和行号
打印匹配前后的行
# 打印匹配行前两行
grep Linux test.txt -n -B2
# 打印匹配行后两行
grep Linux test.txt -n -A2
# 打印匹配行前后两行
grep Linux test.txt -n -C2
使用 -c
选项即可只统计符合条件的总行数,而不会打印出行。
grep "Linux" test.txt -c
排除匹配的行
grep "Linux" test.txt -v
匹配空行
grep "^$" test.txt -n
"."点表示任意一个字符, 有且只有一个, 不包含空行
grep "2.." test.txt -n
"*"表示找出前一个字符0次或一次以上
grep "12*" test.txt -n
".*"表示所有内容, 包括空行
grep ".*" test.txt -n
[abc]表示匹配中括号中任意一个字符, a或b或c,常见的形式如下
- [a-z]匹配所有小写单个字母[A-Z]匹配所有单个大写字母
- [a-zA-Z]匹配所有的单个大小写字母
- [0-9]匹配所有单个数字
- [a-zA-ZO-9]匹配所有数字和字母
grep "[abc]" test.txt -n
扩展正则表达式
在使用-E
选项时,grep才支持扩展正则表达式,不使用-E
选项时,grep默认只支持 基本正则表达式。
grep -E "H?ello" test.txt -n
和管道符联用
cat test.txt | grep -E "H?ello" -n