簡體   English   中英

grep 在 shell 腳本中使用 sed 命令的文件夾

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM