sed小技巧
来源:互联网 发布:生意参谋数据下载 编辑:程序博客网 时间:2024/06/07 05:08
刚刚看老男孩的博客关于sed的讲解,很清晰。我整理记录在案。
先热热身,取出good字符串。
# echo I am good student. | sed 's@^.*am\([a-z].*\)stu.*$@\1@g'
good
1.分隔符#,可以使用/,%,@等替代。
2.sed命令
s 查找并替换,将一个字符串替换成另一个
g 与s联合使用时,表示对当前行全局匹配替换
p 打印匹配行
3.sed选项
-e 允许多项编辑
-n 取消默认输出
4.正则表达式:
^word //以word开头的行
Word$ //以Word结尾的行
. //匹配一个字符
*//匹配0个或多个字符
找出含有(es),(ess),(esss)等的字符串,注意,因为(*)可以是0个,所以es也是符合搜索字符串。另外,因为(*)为重复“前一个字符”的符号,因此,在(*)之前必须要紧接一个重复字符。任意字符则为(.*)
.* //匹配所有字符
5.sed中\( \)和\1的功能:
sed的\( \)功能可以记住正则表达式的一部分,其中,\1为第一个记住的模式即第一个小括号中的匹配内容,\2第二记住的模式,即第二个小括号中的匹配内容,sed最多可以记住9个。
实例说明:
# echo I am good student. | sed 's@^.*am\([a-z].*\)stu.*$@\1@g'
a)^.*am□ //这句的意思是以任意字符开头到am□为止,匹配文件中的“I am□”字符串
b)\([a-z].*\)□ //这句的外壳就是括号\(\),里面的[a-z]表示匹配26个字母的任何一个,[a-z].* 合起来就是匹配任意多个字符,本题来说就是匹配good字符串,由于good字符串是需要保留的,因此用括号括起来匹配,后面通过\1来取good字符串。
c)□stu.*$ //表示以空格tea起始任意字符结尾,实际就是匹配good字符串后,紧接着的字符串“□student.”。
d)后面被替换的内容中的\1就是取前面的括号里的内容了,也就是我们要的good字符串。
取字符串的技巧
取出stat file显示的权限数字
stat file | sed -n 's#^.*(0\([0-7].*\)\/-.*$#\1#gp'
^ 以什么字符开头
. 任意一个字符,这任意一个字符的含义有两层:1.字符的数量只有一个 2.字符包含各种可打印字符,即ASCII码集内的字符
* 重复前面的字符0次或者多次
^.*的含义就是以任意字符开头并后面重复了任意字符的字符序列
(0 就是匹配stat file这个命令的结果中的第二行的第一个(0这个字符串
Access: (0644/-rw-r--r--) Uid: (
\([0-7].*\)
\(\) 在正则表达式中用来保存被匹配模式命中的字符串,并将它保存到1号寄存器里面,可以使用\1来引用它。
可以看出来,针对本题,匹配了644这个字符序列。
\/-.*$
$ 正则表达式中用来表示行的结尾
就是匹配形如 字符序列中含有/-并紧接着任意字符序列的结尾
#\1#
这个表示的是,把前面的字符串用\1取代,这里\1就是644
-n、p选项的作用
sed -n 取消对匹配模式命中的字符串的打印。
在sed的模式中使用p命令表示,打印显示缓冲区(Linux的sed中使用的一个用来显示屏幕内容的缓冲区)中的内容。
把 -n 和p结合使用,能指定要打印的内容。
p是打印符合匹配模式的输入行,模式就是要打印的,加了p,就要打印两次。
-n是取消默认打印。
那么,-n和p联合使用,就是只打印符合匹配模式的内容一次。
正是因为这两个参数,就使得stat file的输出内容的其他行不被打印出来,加上上面说的正则表达式的作用,就只显示644这个内容。
练习
Sed取出ip地址
# ifconfig eth0 | grep "inet[^6]" | sed -n 's#^.*:\([0-9].*\) *B.*$#\1#gp' | sed 's#\s*$##g'
Sed取出mac地址
# ifconfig eth0 | grep "Link[^6]" | sed -n 's@^.* \([0-9].*\)@\1@gp'
Awk取出ip地址
# ifconfig eth0 | awk -F'[ :]+' 'NR==2{print $4}'
Awk取出mac地址
# ifconfig eth0 | awk -F' ' 'NR==1{print $5}'- sed小技巧
- sed小技巧
- 两个sed小技巧
- 嵌入式 sed替换小技巧
- [sed] sed 技巧记录
- sed 技巧
- Sed技巧
- sed技巧
- 【shell】一些编程的小技巧及sed(未完成)
- Sed技巧篇
- sed命令技巧积累
- sed小用法
- awk&sed小备忘
- sed命令小叙
- sed与awk技巧备忘
- Linux中的sed常用技巧
- linux-命令sed 使用技巧
- grep sed awk小问题解决
- Java编程中异常处理的优劣之道
- HDU 1203 强化01背包
- command对象的ExecuteScalar()方法、EexcuteReader()方法
- AOP 面向方面编程
- 网站URL路径的中文问题
- sed小技巧
- 指针和引用的联系与区别
- 构建eLua
- 数组大折腾(第十四周上机任务)
- linux 编译的问题
- 数据导入导出
- 一步一步学JBPM(12)——JBPM流程历史追踪
- Given an array A[i..j] find out maximum j-i such that A[i]<a[j]
- 打开文件夹时,文件默认以列表查看方式浏览