欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux三剑客

程序员文章站 2022-05-13 11:01:18
...

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。
Linux三剑客
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
Linux三剑客
3)查询1.txt中不包含a的行 ------- grep -v ‘a’ 1.txtLinux三剑客
4)查询1.txt中包含A、a的内容 — grep -i ‘a’ 1.txt 或者 gerp -i ‘A’ 1.txtLinux三剑客
5)查询1.txt中的grep字符串并显示匹配内容 — grep -0 ‘grep’ 1.txt
可以与正则一起使用。
Linux三剑客
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个,只显示符合正则的内容。
Linux三剑客

二、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 ---- 打印的输入记录、文本的第一行
Linux三剑客
2)设置变量
awk -va=linux ‘{print $1,$1a}’ test-awk.txt ---- 设置变量a为Linux
Linux三剑客
3)awk ‘BEGIN{FS="#####"}{print $1,$2}’ test-awk1.txt ---- 默认替换分隔符为空格
awk ‘BEGIN{FS="#####";OFS="----"}{print $1,$2}’ test-awk1.txt ---- 分隔符#####变为----
Linux三剑客
4)awk ‘BEGIN{RS="#####"}{print $0}’ test-awk1.txt ---- 找到#####分隔符,并把分隔符后面内容在另一行输出
awk ‘BEGIN{ORS="-----"}{print $0}’ test-awk1.txt ----- 把换行符换成-----
Linux三剑客
5)NR是指awk正在处理的记录位于文件中的位置(行号)
NF是指awk正在处理的记录包含几个域(字段),这于域分隔符有关,默认为空
Linux三剑客
6)awk ‘/e/{print}’ test-awk1.txt ----- 匹配带e的内容
awk -F ‘#####’ ‘$2~/e/{print}’ test-awk1.txt ----- 以#####为分隔符,匹配第二列中包含e的内容
Linux三剑客

三、sed

主要作用是查找;新增 删除 和修改替换。

1、常用参数

	-i 表示inplace edit,就地修改文件
	-n 表示仅显示script处理后的结果
	-e 表示运行多次处理
	s 表示替换
	d 表示删除

2、示例

  1. 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
Linux三剑客
2) sed -n ‘3p’ test-awk1.txt ---- 仅打印第三行
Linux三剑客
3) sed -e ‘1d’ -e ‘s#a#A#g’ test-awk.txt ----- 先删除第一行,然后把a替换成A
Linux三剑客
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