sed巧妙获取软件包名字

来源:互联网 发布:mac eclipse 真机调试 编辑:程序博客网 时间:2024/05/19 04:04


package.txt文件中是一软件包的信息,我现在只想获取软件包的名字(即除去版本号和第一个数字前面的横杠-)

[root@localhost zhaoyj]# cat package.txt
python-0.3.1-1.1
gnome-bluetooth-2.30.0-2.4
libsmack-1.0
prel-1.1
package-groups-0.94-1.1
gnome-settings-daemon-2.30.2-2.3


这是sed的一惯用法:将行进行分段,第一段是软件包名字【绿色】,第二段是版本信息【紫色】

红色 部分\1表示用第一段替换掉第一段和第二段即只保留第一段

黄色部分g表示全局替换【global】

由于小括号在shell里面有特殊含义,如果只是表示括号的话需要用反斜杠进行注释,或者使用-r选项,可以让sed支持extend  regular expresssion

[root@localhost zhaoyj]# sed -e 's/\(.*[a-Z]\)\(-[0-9].*[0-9]\)/\1/g' package.txt

python
gnome-bluetooth
libsmack
prel
package-groups
gnome-settings-daemon


现在体会到高级shell的强大了吧,不过需要承认的是也有不适合用shell的时候,使用perl可能会更简单