I have a list of files: File_2011_1.txt, File_2011_2.txt, File_2011_3.txt ... File_2011_100.txt; I want to update 2011 to 2012 in all the file names.
The following doesn't work:
for FILES in `ls`; do NEWNAME=`echo ${FILES} | sed -e 's/*2011*/*2012*/'`; echo ${FILES} ${NEWNAME}; done;
Run Code Online (Sandbox Code Playgroud)
but this does:
for FILES in `ls`; do NEWNAME=`echo ${FILES} | sed -e 's/File_2011*/File_2012*/'`; echo ${FILES} ${NEWNAME}; done;
Run Code Online (Sandbox Code Playgroud)
So, why does a wildcard in before the part of the filename I want to change not work?
因为sed不使用File willcard(就像它在bash或DOS中),而是正则表达式(正则表达式).
你可以做(只是sed -e 's/2011/2012/'默认's'命令sed匹配字符串的一部分).通配符*将以.*正则表达式语言编写.
sed regexp的基本规则:
^)匹配行的开头.$)匹配该行的结尾.*)匹配前一个字符的零次或多次出现..)匹配任何字符.[和]用于匹配字符集,例如[a-c01]:用单个字符的任何匹配a,b,c,0,或1.