Linux三剑客
Linux三剑客
Linux三剑客即是:grep查找、awk切片、sed修改
一、grep
grep用于查看文件中符合条件的字符串
1、常用参数:
-c 或 --count : 计算符合样式的行数。
-d <动作> 或 --directories=<动作> : 查找目录
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-v 或 --revert-match : 显示不包含匹配文本的所有行。
-i 或 --ignore-case : 忽略字符大小写的差别。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
--line-buffered : grep 会缓存一批数据后再输出,使用--line-buffered使grep不缓存数据。
2、示例:
1)查询1.txt下包含a的行:
cat 1.txt —查看1.txt文件内容(查看文件内容的命令还有:less、more、cat、vi、head、tail),
grep ‘a’ 1.txt --col --查找1.txt中a并且高亮显示,可以看出一共4行,
grep -c ‘a’ 1.txt —计算1.txt中包含a的行数,一共4行,输出4。
2)查询1.txt中包含grep以及前后行
grep -C 1 ‘grep’ 1.txt —使用-C命令,查询包含grep以及前后一行,同理查询前后两行就是grep -C 2 ‘grep’ 1.txt
grep -A 1 ‘grep’ 1.txt —使用-A命令,查询包含grep以及后一行,同理查询后两行就是grep -A 2 ‘grep’ 1.txt
grep -B 1 ‘grep’ 1.txt —使用-B命令,查询包含grep以及前一行,同理查询前两行就是grep -B 2 ‘grep’ 1.txt
3)查询1.txt中不包含a的行 ------- grep -v ‘a’ 1.txt
4)查询1.txt中包含A、a的内容 — grep -i ‘a’ 1.txt 或者 gerp -i ‘A’ 1.txt
5)查询1.txt中的grep字符串并显示匹配内容 — grep -0 ‘grep’ 1.txt
可以与正则一起使用。
6)grep的正则表达式 -E 使用扩展正则表达式。
grep -E ‘user=\w{1,7}’ 1.txt — 查询1.txt中:user=文本或数字1到7个,的行内容
grep -E -o ‘user=\w{1,7}’ 1.txt — 查询1.txt中:user=文本或数字1到7个,只显示符合正则的内容。
二、awk
awk用于处理文本文件、分析文本。
1、常用参数
-F:指定输入文件折分隔符。
-v:赋值一个用户定义变量。
-f :从脚本文件中读取awk命令。
2、awk的内建变量
$n:前记录的第n个字段,字段间由FS分隔。
$0:完整的输入记录。
FS:字段分隔符(默认是空)。
NF:一条记录的字段数。
NR:已经独处的记录数,即行号。
OFS:输入记录分隔符,输出时用指定符合替换分隔符。
ORS:输出记录分割符。
RS:记录分割符。
3、两种模式:
BEGIN:指定处理文本之前需要执行的操作。
END:指定处理完所有行之后需要执行的操作。
4、示例:
1) awk ‘{print $0}’ test-awk.txt ---- 打印完整的输入记录、文本
awk ‘{print $1}’ test-awk.txt ---- 打印的输入记录、文本的第一行
2)设置变量
awk -va=linux ‘{print $1,$1a}’ test-awk.txt ---- 设置变量a为Linux
3)awk ‘BEGIN{FS="#####"}{print $1,$2}’ test-awk1.txt ---- 默认替换分隔符为空格
awk ‘BEGIN{FS="#####";OFS="----"}{print $1,$2}’ test-awk1.txt ---- 分隔符#####变为----
4)awk ‘BEGIN{RS="#####"}{print $0}’ test-awk1.txt ---- 找到#####分隔符,并把分隔符后面内容在另一行输出
awk ‘BEGIN{ORS="-----"}{print $0}’ test-awk1.txt ----- 把换行符换成-----
5)NR是指awk正在处理的记录位于文件中的位置(行号)
NF是指awk正在处理的记录包含几个域(字段),这于域分隔符有关,默认为空
6)awk ‘/e/{print}’ test-awk1.txt ----- 匹配带e的内容
awk -F ‘#####’ ‘$2~/e/{print}’ test-awk1.txt ----- 以#####为分隔符,匹配第二列中包含e的内容
三、sed
主要作用是查找;新增 删除 和修改替换。
1、常用参数
-i 表示inplace edit,就地修改文件
-n 表示仅显示script处理后的结果
-e 表示运行多次处理
s 表示替换
d 表示删除
2、示例
- sed -i ‘s#linux#windows#g’ test-awk1.txt ---- 把test-awk1.txt中的Linux改成Windows
sed -i ‘s/^[a-z]*#/test/g’ test-sed.txt ---- 把test-sed.txt中windows#、centos#改成test
2) sed -n ‘3p’ test-awk1.txt ---- 仅打印第三行
3) sed -e ‘1d’ -e ‘s#a#A#g’ test-awk.txt ----- 先删除第一行,然后把a替换成A
sed的其他用法如下:
1、删除行首空格
sed 's/^[ ]*//g' filename
sed 's/^ *//g' filename
sed 's/^[[:space:]]*//g' filename
2、行后和行前添加新内容
行前:sed -i 's#^#HEAD&#g' filename
行后:sed -i 's#$#&TAIL#g' filename
&代表pattern
3、使用变量替换(使用双引号)
sed -e "s/$var1/$var2/g" filename
4、在第一行前插入文本
sed -i '1 i\插入字符串' filename
5、在最后一行插入
sed -i '$ a\插入字符串' filename
6、在匹配行前插入
sed -i '/pattern/ i "插入字符串"' filename
7、在匹配行后插入
sed -i '/pattern/ a "插入字符串"' filename
8、删除文本中空行和空格组成的行以及#号注释的行
grep -v ^# filename | sed /^[[:space:]]*$/d | sed /^$/d
上一篇: Linux基础命令的那些事儿(1)