Linux三剑客使用笔记
Grep
grep主要用于查找文本或文件中是否含有要查找的 “关键字”
-H 显示文件名前缀
-h 不显示文件名前缀
-n 显示行号前缀
-l 只显示匹配到的文件的文件名
-L 只显示未匹配到的文件的文件名
-c 只显示匹配到的行数
-o 只显示行中匹配的部分
-q 静默模式. 匹配到返回1,否则返回0
-v 显示未匹配到的行
-r Recurse
-i 忽略大小写
-w 全词匹配
-x 全句匹配
-F 不使用正则表达式,仅文本匹配
-E 使用扩展表达式
-m N 每个文件最多匹配N次
-A N 输出文本的最后N行
-B N 输出文本的首部N行
-C N 输出文本的前后各N行
-e PTRN 指定正则表达式
-f FILE 从文件中读取正则
Sed
sed主要是对文本或文件进行修改操作,比如追加、替换、删除等
sed [-inrE] CMD [FILE] -i 表示在文件内执行,不输出;-r -E 表示使用扩展正则;-n 只打印匹配到的行
注:不加参数会整体输出执行后结果,但不会对源文件做改变,要修改文件需要加-i参数
-------------------------------------------------------------
sed的命令包含多种参数,参数一般都有如下两种语法:
sed -n 'n1,n2p' file 数字代表行数,n1 n2可表示从n1到n2行,后接命令参数
sed -n '/pattern/p' file 使用斜线,采用正则表达式匹配行,后接命令参数
p :显示,将某个选择的数据打印显示。通常 p 会与参数 sed -n 一起执行
sed -n '2p' file 打印第2行
sed -n '/pattern/p' file 打印匹配到pattern的行
a :添加, a 的后面可以接字符串,该字符串会在当前指定行的下一行出现
sed '2a\content' file 在第2行后追加一行content内容
sed '/pattern/a\content' file 在匹配到内容后追加一行content内容
d :删除,删除指定行后的内容
sed '3d' file 删除第3行内容
sed '1,3d' file 删除1-3行内容
sed '/pattern/d' file 删除匹配到行后内容
c :更改, c 的后面可以接字符串,该字符串可以取代 n1,n2 之间的行
sed '3c content' file 更改第3行内容为content
sed '1,3c content' file 更改1-3行内容为content
sed '/pattern/c\content' file 更改匹配到行内容为content
i :插入, i 的后面可以接字符串,该字符串会在当前指定行的上一行出现
sed '2i\content' file 在第2行前插入一行content内容
sed '/pattern/i\content' file 在匹配到内容前插入一行content内容
s :替换,使用s做前缀,如
sed 's/pattern/replace/g' file 进行正则匹配,g表示多次替换
w :写入,
sed '/pattern/w /tmpfile' file 将匹配行内容重定向写入到指定文件
-------------------------------------------------------------——
sed 's/\([0-9]\)[a-zA-Z]\([0-9]\)/\1aaa\2/g' 使用\1 \2可以引用匹配串括号内表达式内容
Awk
awk主要用于对文本或文件进行更加复杂的操作,支持编程,主要进行列处理
awk -v a="$idx" '{print $a}' file -v 设定变量,例为输出第idx列
awk -F ' ' '{print $2}' file -F 设定分隔符,例为空格
awk '{print NR}' file 输出行数
awk '{print FNR}' file1 file2 输出每个文件重新计算的行数
awk '{print NF}' file 输出列数
awk '{print $NF}' file 输出最后一列结果
awk '{$4++}END{print $4}' file 多个程序段
awk '!($1 in a){a[$1]=1;print}' 对于结果的第一列去重
awk '{sum += $1};END {print sum}' 对第一列求和
组合技巧
ls -lt /tmp | grep key | head -n 1 |awk '{print $9}' 获取最新的含有key关键字的文件名