grep:文本过滤(模式:pattern)工具;
grep, egrep, fgrep(不支持正则表达式搜索
sed:stream editor,文本编辑工具;
awk:Linux上的实现gawk,文本报告生成器;a
grep [OPTIONS] PATTERN [FILE…]
grep root /etc/passwd
grep |
"$USER" |
/etc/passwd |
|
grep |
'$USER' |
/etc/passwd |
|
grep |
`whoami` |
/etc/passwd |
–color=auto: 对匹配到的文本着色显示;
v -v: 显示不能够被pattern匹配到的行;
v -i: 忽略字符大小写
v –n:显示匹配的行号
v -c: 统计匹配的行数
v -o: 仅显示匹配到的字符串;
v -q: 静默模式,不输出任何信息
v -A #:after, 后#行
v -B #: before, 前#行
v -C #:context, 前后各#行
v –e:实现多个选项间的逻辑or关系=grep “cat -o dog”
grep –e ‘cat ’ -e ‘dog’ |
file |
|
v |
–w:整行匹配整个单词 |
|
v |
–E:使用ERE |
基本正则表达式:BRE 扩展正则表达式:ERE
grep -E, egrep
字符匹配:
. : 匹配任意单个字符;
[] : 匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]
、[:punct:]、[:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字
符要出现的次数
*:匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次 包含行内其他的
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次 贪婪模式
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
位置锚定:定位出现的位置
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定;用于单词模式的右侧
\<PATTERN\>:匹配整个单词
分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进
行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录 于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
\1: 从左侧起,第一个左括号以及与之匹配右括号之间
的模式所匹配到的字符;
sed是一种流编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容
,处理完成后,把缓冲区的内容送往屏幕。接着处理下一
行,这样不断重复,直到文件末尾。文件内容并没有改变
,除非你使用重定向存储输出。Sed主要用来自动编辑一 个或多个文件,简化对文件的反复操作,编写转换程序等
用法:
sed [option]… 'script' inputfile…
v 常用选项:
–n:不运行模式空间内容进行自动打印一般跟-n使用
–e: 多点编辑
–f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本
–r: 支持使用扩展正则表达式
-i: 原处编辑,直接更改原件
v script:
'地址命令'
v 地址定界:
(1) 不给地址:对全文进行处理
(2) 单地址:
#: 指定的行
/pattern/:被此处模式所能够匹配到的每一行
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/第一次出现pART1到第一次出现PART2
#,/pat1/
(4) ~:步进
1~2 奇数行
2~2 偶数行
v 编辑命令:
d: 删除模式空间匹配的行
p: 显示模式空间中的内容,自动打印
a \text:在行后面追加文本,单独显示行文本;支持使用\n实现多行追加
i \text:在行前面插入文本;支持使用\n实现多行插入
c \text:替换change行为单行或多行文本
w /path/to/somefile: 保存模式匹配的行至指定文件
r /path/from/somefile:读取指定文件的文本至模式空
间中匹配到的行后
=: 为模式空间中的行打印行号
!:模式空间中匹配行取反处理
v s///:查找替换,支持使用其它分隔符,s@@@,s###
v 替换标记:
g: 行内全局替换
p: 显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
v sed ‘2p’ /etc/passwd
v sed –n ‘2p’ /etc/passwd将第二行打印出来
v sed –n ‘1,4p’ /etc/passwd 1到4行显示出来
v sed –n ‘/root/p’ /etc/passwd
v sed –n ‘2,/root/p’ /etc/passwd 从2行开始
v sed –n ‘/^$/=’ file 显示空行行号
v sed –n –e ‘/^$/p’ –e ‘/^$/=’ file
v sed ‘/root/a\superman’ /etc/passwd行后
v sed ‘/root/i\superman’ /etc/passwd 行前
v sed ‘/root/c\superman’ /etc/passwd 代替行
v sed ‘/^$/d’ file
v sed ‘1,10d’ file
v nl /etc/passwd | sed ‘2,5d’
v nl /etc/passwd | sed ‘2a tea’
v sed 's/test/mytest/g' example
v sed –n‘s/root/&superman/p’ /etc/passwd 单词后
v sed –n‘s/root/superman&/p’ /etc/passwd 单词前
v sed –e ‘s/dog/cat/’ –e ‘s/hi/lo/’ pets
v sed –i.bak ‘s/dog/cat/g’ pets
v 1、删除/etc/grub2.conf文件中所有以空白开头的行行首的
空白字符
sed -r ‘s/^[[:space:]]+//g’ /etc/grub.conf
v 2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空 白字符的行的行首的#和空白字符
sed "s@^#[[:space:]]\+@@g" /etc/fstab
v 3、在/root/install.log每一行行首增加#号
v Sed ‘s/^/#&/g’ /root/install.log
v 4、在/etc/fstab文件中不以#开头的行的行首增加#号
sed -r “s/^[^#]/#/” /etc/fstab
v 5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
目录名 echo /etc/fstab/sd | Sed -r ‘@[^/]+/?$@\?@ ’
sed -r "s@\<(.*/+)([^/]+/?)\>@\1@" 目录名
基名sed -r "s@\<(.*/+)([^/]+)\>@\2@"
echo '/etc/fstab'|Sed -r <a href="mailto:'s@.*/'s@.*\<@@'
后向引用
Dirname 或者 basename
6、利用sed 取出ifconfig命令中本机的IPv4地址
v ifconfig | sed -n "2p" | sed -r 's@.*addr\>:@@' |cut -d " " -f1
v 7、统计centos安装光盘中Package目录下的所有rpm文件的 以.分隔倒数第二个字段的重复次数
Ls *.rpm | sed ‘s@\.rpm@@’| sed ‘s@.*\/@@’ | uniq -c
Ls *.rpm | sed -r‘.*\.(.*)\.rpm$@\1@’| sort | uniq -c
原创文章,作者:sjfbjs,如若转载,请注明出处:http://www.178linux.com/33215