如何使用sed删除匹配的文本但保留其余部分?

时间:2014-11-22 22:39:39

标签: regex sed

我有一个格式字符串,格式通常为:

PRODUCT_NAME-VERSION-OS(-INSTALLER)?.SUFFIX

我想删除它的VERSION部分。 VERSION被定义为匹配的内容:[0-9]+\.[0-9]+\.[0-9]+。因此,我想执行以下操作:echo NAME | sed -i "\-/[0-9]+\.[0-9]+\.[0-9]+/d,以便获得PRODUCT_NAME-OS(-INSTALLER)?.SUFFIX

我该怎么做?

E.g。

  • Dropbox-1.0.0-win32-setup.exe - >收存箱-Win32的SETUP.EXE
  • GDrive的-2.32.1-linux.deb - > GDrive的-linux.deb
  • 天青-92.0.3-MAC-OSX - >天青-MAC-OSX

2 个答案:

答案 0 :(得分:2)

sed删除操作在匹配的行上。所以,在你的例子中,你将删除整行。您应该前往替换。看看下面的例子:

$ sed -E 's/(.*)-[0-9]+\.[0-9]+\.[0-9]+(.*)/\1\2/'
    <<< "Dropbox-1.0.0-win32-setup.exe"
Dropbox-win32-setup.exe

$ sed -E 's/(.*)-[0-9]+\.[0-9]+\.[0-9]+(.*)/\1\2/'
    <<< "gdrive-2.32.1-linux.deb"
gdrive-linux.deb

$ sed -E 's/(.*)-[0-9]+\.[0-9]+\.[0-9]+(.*)/\1\2/'
    <<< "azure-92.0.3-mac-osx"
azure-mac-osx

答案 1 :(得分:0)

只需将所有内容从第一个-移至第二个-

即可
cat file
PRODUCT_NAME-VERSION-OS-INSTALLER.SUFFIX
PRODUCT_NAME-VERSION-OS.SUFFIX
Dropbox-1.0.0-win32-setup.exe
gdrive-2.32.1-linux.deb
azure-92.0.3-mac-osx

sed 's/-.*-/-/' file
PRODUCT_NAME-INSTALLER.SUFFIX
PRODUCT_NAME-OS.SUFFIX
Dropbox-setup.exe
gdrive-linux.deb
azure-osx