本文共 2617 字,大约阅读时间需要 8 分钟。
1.grep
grep [options] pattern [file…]
options:表示选项pattern:要匹配的模式。file:表示一系列的文件名选项:-c 只输出匹配行的计数-i 不区分大小写(用于单字符)-n 显示匹配的行号-v 不显示不包含匹配文本的所以有行-s 不显示错误信息-E 使用扩展正则表达式 grep -c 关键字 文件名 ##显示出现的关键字的行数grep -n 关键字 文件名 ##显示该关键字的行grep -n2 关键字 文件名 ##显示该关键字行的上下各两行grep -A2 关键字 文件名 ##显示后两行grep -B2 关键字 文件名 ##显示前两行扩展的(Extend)正则表达式(注意要使用扩展的正则表达式要加-E选项,或者直接使用egrep):
匹配字符:这部分和基本正则表达式一样sed对字符处理:
p 显示d 删除a 添加c 替换w 写入i 插入p模式操作:
sed -n '/#/p' fstab 显示有#行的内容sed -n '/#/!p' fstab 除了#的行都显示sed -n '/^#/!p' fstab 除了#开头的行都显示sed -n '/^#/p' fstab 显示#开头的行sed -n '/#$/p' fstab 显示#结尾的行sed -n '/^UUID/p' fstab 显示UUID开头的行sed -n '/^UUID/!p' fstab 除了UUID开头的行都显示sed -n '2,6p' fstab 显示第2行到第6行的内容sed '2,6!p' fstab 除了2-6行都显示d模式操作:sed '/^UUID/d' fstab 除UUID开头的行的内容sed '/^UUID/!d' fstab 删除除UUID开头外的行的内容sed '/^$/d' fstab 删除空行sed '3,8d' fstab ##删除3-8行,不显示,但文件本身并无变化a模式操作:sed '/^UUID/a\hello sed\n westos' fstab ##在UUID的最后一行中加入hello sed 换行 westosc模式操作:sed '/^UUID/c\hello' fstab ##将UUID开头的内容换为helloi模式操作:sed '/^UUID/i\hello sed\n westos' fstab ##将UUID开头的内容之前加入hello sed 换行 westosw模式操作:sed '/^#/w /mnt/testfile' fstab ##将fstab中以#为开头的行整合到/mnt/testfile中sed -n '/^#/w /mnt/testfile' fstab ##不显示sed '6r/mnt/linux' fstab ##将/mnt/linux中的所有内容整合到fstab的第六行中c模式操作 :sed '/^#/chello\nlinux' fstab ##将#开头的行的内容用‘hello\nlinux’替换sed的其他用法:
sed 'G' passwd ##每打印一行同时打印空行sed '$!G' passwd ##最后一行不随后打印空行sed '=' passwd ##打印每一行之前先打印行号,第二行打印内容sed '=' passwd |sed 'N;s/\n/ /' ##将换行换成空格sed -n '$p' data ##显示最后一行awk
awk '{print NR}' passwd ##打印每行行号
awk -F : '{print NF}' passwd ##打印每行有几列awk -F : '{print $1,$2}' passwd ##打印第1列与第二列,空格连接awk -F : '{print $1":"$2}' passwd ##打印第1列与第2列,二者用:连接awk -F : 'BEGIN{print "name passwd"}{print $1":"$2}END{print "end"}' passwd##第一行前加入字符name passwd 最后一行字符加入endawk -F : 'BEGIN{print "name passwd"}/bash$/{print $1":"$2}END{print "end"}' passwd ##结果是以bash结尾的行awk -F : 'BEGIN{n=0}/bash$/{n++}END{print n}' passwd ##对以bash结尾的行进行计数awk -F : 'BEGIN{n=0}{n++}END{print n}' passwd ##对passwd有几行进行计数使用一条命令抓取ifconfig返回的ip:ifconfig ens33|awk '/inet\>/{print $2}'先使用awk '/inet' 抓取以inet开头的一行,然后打印其中的第二列转载于:https://blog.51cto.com/12893781/2394630