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
pythongnome-bluetooth
libsmack
prel
package-groups
gnome-settings-daemon
现在体会到高级shell的强大了吧,不过需要承认的是也有不适合用shell的时候,使用perl可能会更简单