我有一个格式字符串,格式通常为:
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。
答案 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