我对bash很新。所以,如果这是一个非常基本的问题,请原谅我。
我正在尝试将文件扩展名“.gzip
”替换为“.gz
”。
E.g:
testfile.xml.gzip => testfile.xml.gz
有人编写了一个脚本来执行此操作:
GZIP=`echo ${FILE} | grep .gz`
.
.
.
FILE=`echo ${FILE} | sed 's/.gz//g'`
第一行错误地匹配testfile.xml.gzip
文件。 grep .gz
匹配文件名中介于两者之间的文本,而我需要它才匹配,只有它位于文件名的末尾。任何人都可以帮我解决这个问题吗?简而言之,我需要知道匹配模式行/文本末尾的表达式。
答案 0 :(得分:13)
使用$
匹配行尾:
FILE=`echo ${FILE} | sed 's/.gz$//g'`
无论如何,这个命令的作用是从文件名中删除尾随的.gz
扩展名,根据你的问题,这不是你想要的。为此,dnsmkl的答案是使用sed
的方法。
请注意,由于环境变量中已有FILE
,因此您可以按如下方式使用bash string manipulation:
$ FILE=textfile.xml.gzip
$ echo ${FILE/%gzip/zip}
textfile.xml.zip
答案 1 :(得分:7)
字符串的结尾与sed中的“$”匹配
例如
echo 'gzip.gzip' | sed 's|gzip$|gz|g'
输出
gzip.gz
答案 2 :(得分:0)
(ls * .gzip | while read line; do mv“$ line”“$(basename”$ line“.gzip).gz”; done)
答案 3 :(得分:0)
This可能适合您:
rename gzip gz *gzip