Bash 如何匹配行/文本末尾的图案
我对bash很陌生。如果这是一个非常基本的问题,请原谅 我正在尝试将文件扩展名“Bash 如何匹配行/文本末尾的图案,bash,sed,Bash,Sed,我对bash很陌生。如果这是一个非常基本的问题,请原谅 我正在尝试将文件扩展名“.gzip”替换为“.gz” 例如: 有人编写了这样一个脚本: GZIP=`echo ${FILE} | grep .gz` . . . FILE=`echo ${FILE} | sed 's/.gz//g'` 第一行错误地匹配了testfile.xml.gzipfile。grep.gz匹配文件名中介于两者之间的文本,而我只需要在文件名末尾匹配它。有人能帮我纠正这个问题吗?简而言之,我需
.gzip
”替换为“.gz
”
例如:
有人编写了这样一个脚本:
GZIP=`echo ${FILE} | grep .gz`
.
.
.
FILE=`echo ${FILE} | sed 's/.gz//g'`
第一行错误地匹配了
testfile.xml.gzip
file。grep.gz
匹配文件名中介于两者之间的文本,而我只需要在文件名末尾匹配它。有人能帮我纠正这个问题吗?简而言之,我需要知道与行尾/文本匹配的表达式。使用$
匹配行尾:
FILE=`echo ${FILE} | sed 's/.gz$//g'`
无论如何,这个命令所做的是从文件名中删除尾随的.gz
扩展名,根据您的问题,这不是您要查找的扩展名。为此,dnsmkl的答案是使用sed
请注意,由于环境变量中已有文件
,因此可以按如下方式使用bash:
$ FILE=textfile.xml.gzip
$ echo ${FILE/%gzip/zip}
textfile.xml.zip
字符串的结尾在sed中由“$”匹配 比如说
echo 'gzip.gzip' | sed 's|gzip$|gz|g'
输出为
gzip.gz
应该在.gzip文件目录下运行一段时间
(ls*.gzip |在读行时;执行mv“$line”“$(basename“$line”.gzip).gz”完成)可能适合您:
rename gzip gz *gzip
学习POSIX BRE的ane-ERE:-)注意
\r\n
Windows新行。您的匹配模式虽然通常足够,但并非100%正确,因为它还会将foobargz
等文件名转换为fooba
,如果您希望它与点完全匹配,则需要在
之前添加
,否则,图案中的任何点都将匹配任何字符。或者,如果你不关心点,那么最好不要把它们放在模式中,因为它是令人困惑的。
rename gzip gz *gzip