当前位置:  技术问答>linux和unix

100分请教高手sed 表达式

    来源: 互联网  发布时间:2016-12-08

    本文导语:  http://www.cublog.cn/u/21948/showart_413005.html   [armlinux@lqm bash]$ cat test1 uid=500(guest) gid=500(others) groups=500(users),11(floppy)       下面把小括号内的值单独取出,如果利用贪婪规则,解决方案如下:   1 sed -e 's/[^(]*(([^)]*)....

http://www.cublog.cn/u/21948/showart_413005.html

 

[armlinux@lqm bash]$ cat test1
uid=500(guest) gid=500(others) groups=500(users),11(floppy)
 
    下面把小括号内的值单独取出,如果利用贪婪规则,解决方案如下:
 

1 sed -e 's/[^(]*(([^)]*).*/1/' test1
2 sed -e 's/[^(]*(([^)]*)[^(]*(([^)]*).*/2/' test1
3 sed -e 's/[^(]*(([^)]*)[^(]*(([^)]*)[^(]*(([^)]*).*/3/' test1
4 sed -e 's/.*((.*))/1/' test1


1 sed -e 's/[^(]*(([^)]*).*/1/' test1
这一句中的[^(]是什么意思?
整句怎么分析?

|
sed -e 's/[^(]*(([^)]*).*/1/' test1

主要是sed的替换命令,语法如下:
[address]s/pattern/replacement/flags

本问题的pattern是:[^(]*(([^)]*).*
[ ]     匹配方括号所包括的字符中的任何一个
( )   把( 和 ) 之间的模式保存到专门的存储空间,然后可以用1,2 …… (即 n 来引用,n最大为9)

首先匹配0个或多个不是(的字符,直到(字符,然后将(字符后面的0个或多个不是)的字符的内容存储到1中

最后就是简单的替换命令了,用1替换uid=500(guest),即guest替换uid=500(guest)


|
[ ] 匹配方括号所包括的字符中的任何一个,例如,[AB]匹配A或B
插入符^作为方括号内的第一个字符,^使上述的含义反过来,即[^AB]匹配任何不是A和B的字符

|
太复杂了,帮你顶

|
纠正一下

.* 表示匹配任意数量的任何字符(除了换行符)
最后就是简单的替换命令了,用1替换上面个句子,即guest替换uid=500(guest) gid=500(others) groups=500(users),11(floppy)

1 sed -e 's/[^(]*(([^)]*).*/1/' test1
2 sed -e 's/[^(]*(([^)]*)[^(]*(([^)]*).*/2/' test1
3 sed -e 's/[^(]*(([^)]*)[^(]*(([^)]*)[^(]*(([^)]*).*/3/' test1

上述三个原理相同,区别只是分别捕获和存储不同的内容,即 1 2 3

4 sed -e 's/.*((.*))/1/' test1
最后一个使用贪婪的方法捕获floppy

|

sed不支持非贪婪

|
用sed 完成这个任务感觉有点勉为其难啊
用awk轻松搞定

awk -F[()] '{print $2}' test1
awk -F[()] '{print $4}' test1
awk -F[()] '{print $6}' test1
awk -F[()] '{print $8}' test1

|
1 sed -e 's/[^(]*(([^)]*).*/1/' test1

[^(]字符不包涵(的

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3