LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2118|回复: 11

俺也来出一题:sed、awk练习

[复制链接]
发表于 2003-5-6 12:15:51 | 显示全部楼层 |阅读模式
现有文本文件格式如下:
--------------------------------------------------------------------
#It's a configurefile

Section "SystemCheck"

Package:x-window-system-core
Package:wmaker
Package:locales
Package:defoma
Package:x-ttcidfont-conf
Package:libft-perl
Package:libgtk1.2-common
Package:xlibs-dev

EndSection

Section "SoftwareConfig"

Package:XMMS
Package:Gimp
Package:xchat

EndSection
--------------------------------------------------------------------
要求:将该文件中的两类Package分别读入变量systemlist和softwarelist,各Package名称之间以空格分隔。

即echo $systemlist的结果如下:
x-window-system-core wmaker locales defoma x-ttcidfont-conf libft-perl libgtk1.2-common xlibs-dev
发表于 2003-5-6 12:54:06 | 显示全部楼层
是这样的吧?! ;)
javalee//home/javalee/lx>cat -n filename
     1  #It's a configurefile
     2
     3  Section "SystemCheck"
     4
     5  Package:x-window-system-core
     6   Package:wmaker
     7   Package:locales
     8   Package:defoma
     9   Package:x-ttcidfont-conf
    10   Package:libft-perl
    11   Package:libgtk1.2-common
    12   Package:xlibs-dev
    13
    14  EndSection
    15
    16  Section "SoftwareConfig"
    17
    18  Package:XMMS
    19   Package:Gimp
    20   Package:xchat
    21
    22  EndSection
    23
javalee//home/javalee/lx>systemlist=$(sed -n '5,12p' filename|awk -F: '{print $2}')
javalee//home/javalee/lx>echo $systemlist
x-window-system-core wmaker locales defoma x-ttcidfont-conf libft-perl libgtk1.2-common xlibs-dev
javalee//home/javalee/lx>softwarelist=$(sed -n '18,20p' filename|awk -F: '{print $2}')
javalee//home/javalee/lx>echo $softwarelist
XMMS Gimp xchat
javalee//home/javalee/lx>
发表于 2003-5-6 13:09:24 | 显示全部楼层
??按行号?如果行号不确定呢?
比如说最后一个Package:*****的行号不是一个确定值
 楼主| 发表于 2003-5-6 13:16:50 | 显示全部楼层
呵呵,有道理。

configfile=configfile.cnf
systemlist=$( sed -n -e '/Section "SystemCheck"/,/EndSection/p' $configfile | awk -F":" '/Package:/ { print $2 }' )

echo $syslist
x-window-system-core wmaker locales defoma x-ttcidfont-conf libft-perl libgtk1.2-common xlibs-dev
发表于 2003-5-6 13:33:55 | 显示全部楼层
呵~~有道理!
如果没有Section...Endsection标识呢?!行号,不过是为了方便而已,要不然要那个cat -n又有什么用呢?!
发表于 2003-5-6 13:40:53 | 显示全部楼层
systemlist=$(cat configfile | sed -ne '/Section "SystemCheck"/,/EndSection/s/\(.*\)Package:\(.*\)/\2/p')
 楼主| 发表于 2003-5-6 16:16:41 | 显示全部楼层
s/\(.*\)Package:\(.*\)/\2/p

kwokts的做法妙呀,佩服佩服!
发表于 2006-5-17 21:51:08 | 显示全部楼层
systemlist=$(cat configfile | sed -ne '/Section "SystemCheck"/,/EndSection/s/\(.*\)Package:\(.*\)/\2/p')

这段代码的后半部分s/\(.*\)Package:\(.*\)/\2/p看不懂阿,请哪位好兄弟为我解释一下阿
回复 支持 反对

使用道具 举报

发表于 2006-5-18 06:01:59 | 显示全部楼层
天啊。。3年前的帖子。。。


sed -n 的作用是不输出任何结果。
最后的 /p 是只输出相应的替换部分。

你试试就知道咯。:)。
回复 支持 反对

使用道具 举报

发表于 2006-5-18 13:16:20 | 显示全部楼层
sed -n 的作用是不输出任何结果。
最后的 /p 是只输出相应的替换部分。

兄弟这个我知道呵呵

我想问的是那个正则表达式,我看不明白呵呵,麻烦指点一下,对我来说这个正则式有点复杂

呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表