[英]grep the folder using sed command in shell script
我正在尝试 grep 来自完整 tar 文件的文件夹名称。 下面是例子。
例子:
TEST-5.3.0.0-build1.x86_64.tar.gz
我想 grep shell 脚本中的文件夹名称( TEST-5.3.0.0-build1 )
所以我尝试了以下命令 grep
$ package_folder=$(echo TEST-5.3.0.0-build1.x86_64.tar.gz | sed -e "s/.[0-9]*[a-z]*[0-9]*.tar.gz$//" | sed -e 's/\/$//')
但我得到低于 output:
$ echo $package_folder
TEST-5.3.0.0-build1.x86
你能请任何人纠正我我做错的地方吗? 我需要文件夹名称为 TEST-5.3.0.0-build1
提前致谢!!!
在您的命令中,您不匹配_
、 x
等。 [0-9]*[az]*[0-9]*
仅匹配零个或多个数字、零个或多个(小写)字母的序列,并且零个或多个数字。 最好使用[^.]*
来匹配除.
两者之间.
字符。 此外,文字点必须转义或未转义的.
将匹配任何单个字符。
您可以使用
sed 's/\.[^.]*\.tar\.gz$//'
或者,如果x86_64
也是一个常量,则只需使用字符串操作:
s='TEST-5.3.0.0-build1.x86_64.tar.gz'
s="${s/.x86_64.tar.gz/}"
查看在线演示:
#!/bin/bash
s='TEST-5.3.0.0-build1.x86_64.tar.gz'
package_folder=$(sed 's/\.[^.]*\.tar\.gz$//' <<< "$s")
echo "${package_folder}"
# => TEST-5.3.0.0-build1
s="${s/.x86_64.tar.gz/}"
echo "$s"
# => TEST-5.3.0.0-build1
您可以在此字符串的替换部分中使用uname -m
:
s='TEST-5.3.0.0-build1.x86_64.tar.gz'
echo "${s%.$(uname -m)*}"
TEST-5.3.0.0-build1
或使用sed
:
sed "s/\.$(uname -m).*//" <<< "$s"
TEST-5.3.0.0-build1
使用sed
$ package_folder=$(echo "TEST-5.3.0.0-build1.x86_64.tar.gz" | sed 's/\(.*\)\.x86.*/\1/')
$ echo "$package_folder"
TEST-5.3.0.0-build1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.