数据流
数据流重定向
-
将命令的输出写入文件
# ls -al / > ./rootfiles # 写入到rootfiles # ls -al / >> ./rootfiles # 追加到rootfiles
-
将命令报错写入文件
# ls -al /notadir 2> ./rootfiles # 写入到rootfiles # ls -al /notadir 2>> ./rootfiles # 追加到rootfiles # ls -al /notadir 2> /dev/null # /dev/null是一个黑洞, 扔进去的东西就没了
-
将正确和报错都写入同一个文件
# ls -al / > ./rootfiles 2>&1 # 写入到rootfiles, &1指代rootfiles
-
从文件读取
# ls < listfile
一定条件下执行命令
-
;分隔符
:连续执行多个命令# ls;touch newfile
-
&&分隔符
: 在前一条命令不报错的时候执行下一条命令# ls /tmp && touch /tmp/newfile # /tmp目录存在时创建/tmp/newfile
-
||分隔符
: 在前一条命令报错的时候执行下一条命令# ls /tmp/newfile || touch /tmp/newfile # 如果/tmp/newfile不存在就创建它
提取信息
-
使用
grep
搜寻字符串# grep [expr] [targetfile(s)]
-
数据流重定向给grep
# ls | grep [expr]
-
grep
正则表达式的特殊规则{m, n}
:大括号需要转义, 亦即写成grep '...\{m, n\}' ...
[a-z]
: 中括号不需要转义
-
egrep
, 延申的正则表达式- 可以使用
+, ?, |, ()
等特殊符号
- 可以使用
-
-
使用
sed
替换删除# sed '[line range][actions]' [stdin]
[line range]
用n1,n2
的形式表示n1行到n2行所有行
.[actions]
包括:a
: 新增,c
: 取代,d
: 删除,i
:插入,p
: 打印,s
: 取待, 语法类似vim中ex编辑器.如果一个
sed
不够, 还可以再接sed
.单引号不要丢
-
列出
/etc/passwd
, 删除2到5行# cat /etc/passwd | sed '2,5d'
-
在2到5行后增加两行文字
111\n222
# cat /etc/passwd | sed '2,5a111\ >222' # 通过命令行的换行来增加多行文字
-
将2到5行的
:
更换为,
# cat /etc/passwd | sed '2,5s/:/,/g'
-
比较文件不同
-
diff
# diff [-bBi] from-file to-file 比较from-file和to-file的不同, 输出from-file和to-file的差异 -b: 多个连续空格视作一个 -B: 忽略空行差异 -i: 忽略大小写差异
-
cmp
# cmp [-s] from-file to-file 如果没有-s参数, 只会列出第一个不同处. 可以比较二进制文件.