我对bash很新.所以,如果这是一个非常基本的问题,请原谅我.
我正在尝试.gzip用' .gz' 替换文件扩展名' '.
例如:
testfile.xml.gzip => testfile.xml.gz
Run Code Online (Sandbox Code Playgroud)
有人编写了一个脚本来执行此操作:
GZIP=`echo ${FILE} | grep .gz`
.
.
.
FILE=`echo ${FILE} | sed 's/.gz//g'`
Run Code Online (Sandbox Code Playgroud)
第一行错误地匹配testfile.xml.gzip文件.本grep .gz场比赛在文件名中的文字是在两者之间,而我需要的,如果它是在文件名末尾它只匹配.任何人都可以帮我解决这个问题吗?简而言之,我需要知道匹配模式行/文本末尾的表达式.
jco*_*ado 13
使用$该行的末尾匹配:
FILE=`echo ${FILE} | sed 's/.gz$//g'`
Run Code Online (Sandbox Code Playgroud)
无论如何,这个命令的作用是.gz从文件名中删除尾随扩展名,根据你的问题,这不是你想要的.要做到这一点,dnsmkl的答案是顺便说一句sed.
请注意,由于您已经拥有FILE环境变量,因此可以使用bash 字符串操作,如下所示:
$ FILE=textfile.xml.gzip
$ echo ${FILE/%gzip/zip}
textfile.xml.zip
Run Code Online (Sandbox Code Playgroud)
字符串的结尾在sed中与"$"匹配
例如
echo 'gzip.gzip' | sed 's|gzip$|gz|g'
Run Code Online (Sandbox Code Playgroud)
输出是
gzip.gz
Run Code Online (Sandbox Code Playgroud)