今天分享的学习笔记内容是Linux三剑客,包括grep、sed、awk命令的基础知识,以及一些正则表达式相关内容。
正则表达式是对字符串和特殊字符操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个规则的文本,sed、awk、grep命令能够实现这种功能。
文本搜索grep函数
grep是一个文本搜索工具,支持正则表达式,能够把匹配的行显示出来。egrep是扩展版支持更多元字符,笔记里提到的为grep。语法格式如下:
grep '条件' file.name -x(参数)
命令常见参数选项(-x
):
-
i:忽略大小写 -
v:输出反转结果 -
x:精确匹配整行内容 -
-color:高亮显示匹配行 -
n:输出同时显示行号 -
c:计算符合样式的行数 -
q:不显示任何信息
简单示例
grep '^abc' xx.txt
输出以abc开头的行
grep '[0-9]' xx.txt
输出包含数字的行
grep '^$' xx.txt
输出空行
grep 'xyz$' xx.txt
输出以xyz结尾的行
grep 'a*c' xx.txt
输出a开头c结尾的行
文本处理awk函数
awk最基本的功能是基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息。通常,awk是以文件的一行为处理单位。语法格式如下:
awk '{pattern + action}'{filenames}
awk 'BEGIN{OFS=FS="\t"}{print $0, $1;}' filename
awk 'BEGIN{OFS=FS="\t"}ARGIND==1{print $0, $1;}ARGIND==2{print $0;}' file1 file2
awk运算符: awk内置变量:
常见参数解释
-
OFS:输出时列分隔符 -
FS:输入时列分隔符 -
$0:第一行 -
$1\$2\$NF:第一列、第二列、最后一列 -
NF:总列数 -
NR:总行数 -
FNR:当前读取了多少行 -
F:指定分隔符
实例演示
-
输出20到30行的内容
awk '{if(NR>=20 && NR<=30) print $1}' test.txt
文本替换sed函数
sed一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。这样不断重复,直到文件末尾。
-
语法格式为:
sed [-nefri等参数] ‘command’ 输入文本
sed -i 's/被替换的内容/要替换成的内容/' file
sed 's/被替换的内容/要替换成的内容/g' file > file.out
-
n∶安静模式。只有经过sed 特殊处理的那一行才会被列出来。 -
e∶直接在指令列模式上进行 sed 的动作编辑; -
f∶直接将 sed 的动作写在一个档案内, -
r∶sed 延伸型正则表示法的语法。(预设是基础正则表示法语法) -
i∶直接修改读取的档案内容,而不是输出。
实例展示
删除文件第3行
sed '3d' xxx.txt
删除文件最后一行
sed "$d" xxx.txt
删除空格
sed ’s/^[ ]*//g’ xxx.txt
替换:把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
sed 's/test/mytest/g' xxx.txt
添加新行(向前)
sed ‘s/pattern/&\n/g’ filename
在最后一行插入字符
sed -i ‘$ a\插入字符串’ filename
参考资料
https://www.cnblogs.com/ginvip/p/6352157.html https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215
http://www.ehbio.com/Bioinfo_bash_course/LinuxGreatTools.html#regularExpr
本文由 mdnice 多平台发布