我正在嘗試從完整的 tar 檔案中 grep 檔案夾名稱。下面是示例。
例子:
TEST-5.3.0.0-build1.x86_64.tar.gz
我想在 shell 腳本中grep 檔案夾名稱(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/\/$//')
但我得到低于輸出:
$ echo $package_folder
TEST-5.3.0.0-build1.x86
你能請任何人糾正我在我做錯的地方。我需要檔案夾名稱為 TEST-5.3.0.0-build1
提前致謝!!!
uj5u.com熱心網友回復:
在您的命令中,您不匹配_、x等。 The [0-9]*[a-z]*[0-9]*only 匹配零個或多個數字、零個或多個(小寫)字母以及零個或多個數字的序列。最好使用 a[^.]*來匹配除.兩個.字符之間的任何字符。此外,必須對文字點進行轉義,否則未轉義的.點將匹配任何單個字符。
您可以使用
sed 's/\.[^.]*\.tar\.gz$//'
或者,只使用字串操作if 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
uj5u.com熱心網友回復:
您可以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
uj5u.com熱心網友回復:
使用 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/377085.html
上一篇:如何將特定值從csv檔案決議為for回圈命令?[復制]
下一篇:將表單添加到布局
