grep(global regular expression print)
能够在一个或者多个文件中,搜索某一个特定模式(正则表达式),此模式可以是单一的字符,字符串,单词和句子
正则表达式:描述一组字符串的一个模式,regular expression 模仿了数学表达式,通过使用操作符将最小的表达式组合成了一个新的表达式,正则表达式通配符::
c* 匹配0个或者多个c的字符串
. 将匹配任何一个字符,且只能是一个字符
[XYZ] 匹配方括号中的任何一个字符
[^xyz] 匹配除括号中的字符串外的所有字符串
^ 锁定行的开头
$锁定行的结尾
grep命令格式
grep 【选项】 模式 文件名字
模式范围是字符串 或者正则表达式
选项: -c 列出包含模式的行数, -i忽略大小写 -l带有匹配行的文件名, -n 每一行前面的行号 -v 列出没有匹配模式的行 -w
sed: vim采用交互式文本编辑器, sed是采用流编辑模式,明显的特征是 sed处理数据前,需要提前提供一组规则,sed按照此规则来编辑数据
sed根据脚本命令来处理文本文件中的数据,执行顺序:
1.每次仅读取一行内容
2.根据提供的规则命令匹配并修改数据 。 sed默认不直接修改源文件,将数据复制到缓冲区,修改也只限制缓冲区的数据
3.执行结果输出
一行数据匹配完成后,接着读取下一行数据,重复这个过程,到文件中的所有数据处理完成
sed命令基本格式
sed[选项][脚本命令]文件名
常用的选项:
-e 脚本命令:该选项会将后面跟的脚本命令添加到已有的命令中
-f脚本命令文件:将后面文件中的脚本命令添加已有的命令中
-n :屏蔽启动输出,需要使用print来完成输出
-i 直接修改源文件
脚本命令
sed s替换脚本命令
基本格式
[address]s/pattern/replacement/flags
address指的具体行数,pattern需要替换的内容,replacement要替换的新内容
flags n-替换字符串出现第几次才进行替换, g 对数据中所有匹配的内容进行替换,没有g只会替换第一次匹配成功的数据
p打印与替换命令中指定的模式匹配的行; w file 将缓冲区的内容写到指定的文件;&用正则表达式匹配的内容替换
\n 匹配第n个子串,该子串之前在pattern中用\指定 ; \转义字符
例子: sed ‘s/test/trial/2' test.txt
sed d
基本格式 [address]d
删除文件中特定行
例子: sed ’3d‘ test.txt
sed a和i脚本命令
a在指定行的后面附加新一行,i命令表示在指定行的前面插入一行,
[address]a(或i) \新文本内容
例子: sed ’3a \ this si a new line.' data.txt
sed c脚本命令
c命令是将指定行中的所有内容,替换呈该选项后面的字符串,基本格式:
sed [address]c\replacements
其他命令
sed y:处理单个字符的sed脚本命令
sed p :搜索符号条件行,并输出呢日哦那个
sed w: 写入文件
sed r: 将一个独立文件数据插入到数据流指定位置
sed q: 退出脚本命令
sed寻址方式
awk命令:linux下另一个功能强大的文本数据处理工具,设计者(Aho,Weingberger Kernighan)
逐行扫描,寻找目标文本的行,如果匹配成功,则执行用户想要的操作,反之,则不对作任何处理
awk命令的基本格式
awk [选项] '脚本命令‘ 文件名
选项:
-F fs 以fs作为输入行的分隔符, awk命令默认分隔符为6空格或者制表符
-f file 从脚本文件中读取awk脚本指令,取代命令行中输入指令
-v var=val 执行处理过程前,设置一个变量var,并给其设备初始值为val
awk强大之处在于命令脚本,有2部分组成,分别是匹配规则和执行命令
‘匹配规则{执行命令}’
匹配规则和sed命令中address部分作用相同,用于指定脚本命令可以作用的文本内容的具体行,可以使用字符串或者正则表达式指定,需要主要,整个脚本命令用(‘’)括起来,而其中执行的命令部分需要用大括号{}括起来
awk程序执行时,如果没有执行命令,默认会把匹配的行输出,如果不指定匹配规则,则默认匹配文本中所有行
例子:
awk ‘/^$/{print "blank line"}' test.txt
awk 使用数据字段变量
awk主要特性之一是其处理文本文件中数据能力,它会自动给一行中每个数据分配一个变量
默认情况下,awk会将如下变量分配给它在文本行中发现的数据字段
$0代表整个文本行
$1 代表文本行中的第1个数据字段
$2代表文本行中的第2个数据字段
$n代表文本行中的第n个数据字段
前面说过,awk中,默认的字段分隔符是任意的空白字符(空白字符或者制表符),在文本中,每个数据字段都是通过字符分隔符划分的,awk在读取一行文本时,使用预定义的字段分隔符划分每个数据字段
例子: awk ’{print $1}' data2.txt
awk脚本命令使用多个命令
awk允许将多条命令组合成一个正常程序,要在命令行上的程序脚本中使用多条命令,只需要在命令之间放个分号
例子:echo "my name is rich" | awk‘{$4="KANG"; print $0}’
awk从文件中读取命令
awk -F:-f awk.sh /etc/passwd
awk BEGIN/END关键字
BEGIN是脚本指令在awk运行前运行BEGIN命令,END是在指令awk运行后运行END命令
例子:
awk ' BEGIN{pirnt "this is a start"} {print $0} END{print "end of file"}' data2.txt
’