[英]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.