文本匹配
head -n[nume] 显示文件的开始几行
tail -n[nume] 显示文件的最后几行
-f 实时监控文件日志
wc 统计字符
-l 统计函数
-w 统计单词
-c 统计字节
grep 过滤行,以行为单位过滤
-i 忽略大小写
-w 匹配一个词(字母加数字算一个词)
-n 查看匹配字符所在的行并显示行号
-o 只显示匹配到的内容一行一个
-v 去除匹配到的行
-A [num] 查看匹配成功字段的的·后num行
-C [num] 查看匹配成功字段的的后num行
-r [文本参数] [目录] 查找字符串所在的文件
-l 只列出查找成功的文件名
cut 提取列或者字段
-d[str] 指定提取列的指定分隔符
-f [num] 选择要打印哪一列
-c [num] or [num]-[num] 按照字符来提取
查看 “/” 分区的使用率
df -Th | grep -w '/' | cut -d \ -f18 | cut -d % -f 1
查看ip地址
ifconfig | grep -w inet | cut -d" " -f10 | head -n 1
基本正则表达式
^[str] 匹配每行的开始
grep -n "^root" passwd 匹配passwd文件中以root用户开始的行
[str]$ 匹配每行的结尾
grep -n "bash$" passwd 匹配passwd文件中以bash结尾的行
^$ 标识空行
grep -v "^$" profile 去除空行
\<[str] 匹配以str开始的单词,不是行
\>[str] 匹配以str结尾的单词,不是行
str. 任意字符
[str] 代表一个字符 中括号有
grep -i "^[abc]" passwd 过滤以a、b、c开头的行
[A-Z] A至Z的大写字母
[a-z]
[0-9]
[A-Za-z] 代表所有字母
[^str] 代表一个字符,但是这个字符不能是str,不匹配这个字符
grep -i [^abc]
grep "^[^abc]" 不匹配以abc开头的行
\ 转义字符,把符号转为原本的意思 ,去除其他特殊意思
grep "^\[" 匹配以中括号开头
* 前一个字符出现0到多次
grep -i "r*" 匹配r和后面0至多个的r
grep -v "r[0-9]*" 不匹配r和r后面有0至多个的[0至9]字符
grep -n "r[a-zA-Z]*" 匹配r和r后面0至多个的任意字母并显示所在行数
扩展正则表达式
需要使用 grep -E 或者 egroup 也都支持基础正则表达式通用
+ 代表+前面的1个字符出现1到多次
grep -E "ro+" passwd 匹配o出现1到多次的
? 代表?前面的一个字符出现0到一次
grep -E "ro?" passwd 匹配o出现0到1次的
{m} 代表前面的字符出现m次
{m,n} 代表前面的字符出现m到n次
{m,} 代表前面的字符出现m到若干次
{,n} 代表前面的字符出现0到n次
s|t "|"代表或,也就是说匹配s或者t
tail -f messages | egrep -i 'err|warn' 查看messages,只更新有err行和warn行的
(str...) 表示一个整体的字符
grep -E '(ro)*' passwd 表示ro整体出现多次
匹配ifconfig内的ip地址
ifconfig | grep -E -n -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
或者
ifconfig | egrep -n -o '([0-9]{1,3}\.){3}[0-9]{1,3}'
使用的时候需要在外多添加一个[]
[:alpha:] 匹配字母(不区分大小写)
[:lower:] 匹配大小写字母
[:upper:] 匹配大写字母
[:digit:] 匹配数字
[:space:] 匹配空格
[:alnum:] 匹配容易字母或数字
[:punct:] 除空格和字母、数字意外的任何可打印字符
\u 当前用户
\h 当前主机名
\W 当前目录
文本分析工具
wc [file] 统计单词数、行数、字节数
如果直接使用wc [file] 他直接包含了 -l -w -c
-l 统计行数
-w 统计单词数
-c 统计字节数
awk
'{print $2}' 输出第二列
-Fn 指定分隔符
df -Th | grep -w "/" |awk '{print $6}' | cut -d % -f 1
sort [file] 给字符排序,默认是升序
-r 降序排列
-n 数字排列
-f 忽略大小写排列
-u 删除重复行排列
-t[str] 指定分隔符
-k[num] 指定分隔符后按照地num字段排序
指定分隔符 ":" 按照第3列排序,如果是数字则启用数字排序(如果没有加-n选项默认回事ascii码排序)
sort -t: -k3 -n passwd
uniq [file] 去除相邻重复项
-c 统计发生的重复次数
常见用法通常和sort一起用,把passwd文件排序指定每列的分隔符为“:”,使用第3列安装数字排序,并过滤到空行,删除相同的行并显示重复次数
sort -t: -k3 -n passwd | grep -v "^$" |uniq -c
tr [str] [str] 文本转换工具,将字符转换成另外一种字符
-s 去除重复的空额
查看passwd文本,过滤掉空行,删除重复行,在将":"转换为 "|"
cat passwd | grep -v "^$" | uniq -c | tr ':' '|'
test 将输入的大写字母转换为小写字母并重定向到test文档
tr "A-Z" "a-z" >>
sed [file]
-n 只打印需要的内容,如果不加-n,它会将源文件先全部打印出来,在去打印你需要的
-r 支持扩展正则表达式
-i 直接编辑源文件
-e 可以使用多个命令或者脚本进行操作
[num]or[num1,num2]p 打印文本
sed -n 10p passwd 打印 10行文本
sed -n 10,20p passwd 打印10到20行文本
sed -n '$ p' 打印最后一行
sed -n '10, p' 打印10到最后一行
[num] or [num1],[num2] d 删除匹配到的行,配置 -i使用可以直接删除文本内的数据,不加 -i 只是显示删除
sed -i '1,3d' passwd 删除passwd文件中的1,3行
'[num] or [num1],[num2]a\[str]' 直接在匹配到的行之后追加内容
sed -i '4 a\aaa' passwd 在passwd文件第4行后添加aaa
'[num] or [num1],[num2] i\[str]' 直接在匹配到的行之前追加内容
sed -i '4 i\aaa' passwd 在passwd文件第4行后添加aaa
'[num] or [num1],[num2] c\[str]' 把匹配到的行给定的文本进行交换
sed -i '4 c\cccc' passwd
'[num1],[num2]s/[str1]/[str2]' 把str1换成str2
/g 表示全局替换
sed 's/^\(..\)./\1/' [file] 任意两个开始两个字符(因为使用“()”起来了),后面还有一个.也表示任意一个字符,替换为 \1 ("\1"表示前一个“()”内匹配的字符),作用就是删除第三个字符
将passwd文件中的 bin全部替换为aaa
sed -n -i 's/bin/aaa/g' passwd
将passwd显示出1到4行的x替换为X,并显示
sed -n '1,4 s/x/X/p' passwd
'[num] or [num1],[num2] w /dir/file' 将匹配到的文件存放在另外一个文件
sed -i '6,10 w /opt/passwd2' passwd
/[str] or [正则表达式]/ 打印匹配正则表达式所在的行
sed -n -r '/10|11/ p' passwd 打印10行或者11行
sed -n -r '/[A-Z]/ p' passwd 打印所有有大写字母的行
[num1]~[num2] 表示冲num1显示后面+num2的行数
[num1],+[num2] 表示显示num1和后num2行
cat -n passwd | sed -n '3,+2p' 显示3行和3行的后2行