grep
grep定义
根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行
grep命令形式
grep [OPTIONS] PATTREN [FILE…]
pattern为正则表达式
选项
语法 | 说明 |
---|---|
-v | 显示不被pattern匹配到的行 |
-i | 忽略字符大小写 |
-n | 显示匹配的行号 |
-c | 统计匹配的行数 |
-o | 仅显示匹配到的字符串 |
-E | 使用ERE,相当于egrep |
练习
1.查找文件file.txt内容包含root的行号
grep -n root file.txt
2.查找文件file.txt内容不包含root的行号
grep -vn root file.txt
3.查找以S开头的行
grep -n ^s file.txt
4.查找以n结尾的行
grep -n n$ file.txt
sed
sed定义
sed是流编辑器,一次处理一行内容
sed处理流程
命令形式
sed [-hn…] [-e< script>][-f< script FILE>][FILE]
-h:显示帮助
-n:仅显示script处理后的结果
-e< script>:以选项中指定的script来处理输入的文本文件
-f< script>:以选项中指定的script文件来处理输入的文本文件
常用动作
语法 | 语义 | 示例 | 示例解释 |
---|---|---|---|
a | 新增 | sed -e ‘4 a newline’ | 在第四行后新增加一行“newline”的文字 |
c | 取代 | sed -e ‘2,5c No 2-5 number’ | 将第2,5行内容换为“No 2-5 number” |
d | 删除 | sed -e ‘2,5d’ | 将第2,5行内容删除掉 |
i | 插入 | sed -e ‘2i newline’ | 在第2行前面插入一行“newline”的文字 |
p | 打印 | sed -n ‘/root/p’ | 两个“/”中间夹的是正则,p代表打印处来 |
s | 取代 | sed -e ‘s/old/new/g’ | 用后面的“new”取代前面的“old”,g表示全局,全部替换 |
上述对的增删插入等操作都不会对原文件进行改变!!
如果直接修改文件内容的话:
sed -i 's/root/hello/g' test.txt
awk
awk定义
把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理
处理流程
命令形式
awk 'pattern+action'[FILEnames]
-pattern:正则表达式
-action:对匹配到的内容执行的命令(默认为输出每行内容)
常用参数
FILENAME :awk浏览的文件名
BEGIN:处理文本之前要执行的操作
END:处理文本之后要执行的操作
FS:设置输入域分隔符,等价于命令行 -F选项
NF:浏览记录的域的个数(列数)
NR:已读的记录数(行数)
OFS:输出域分隔符
ORS:输出记录分隔符
RS:控制记录分隔符
$0:整条记录
$1:表示当前行的第一个域…以此类推
练习
搜索/etc/passwd有root关键字的所有行,并显示对应的shell
awk -F:'/root/{print $7}' /etc/passwd
打印/etc/passwd/的第二行信息
awk -F:'NR==2{print $0}' /etc/passwd
使用begin加入标题
awk 'BEGIN {print "BEGIN","BEGIN"}{print $1,$2}' /etc/passwd
自定义分隔符
echo “111 222|333 444|555 666”|awk 'BEGIN{RS="|"}{PRINT $0}'