0

ファイルのリストがあります: File_2011_1.txtFile_2011_2.txtFile_2011_3.txt... File_2011_100.txt; すべてのファイル名で 2011 を 2012 に更新したい。

以下は機能しません。

for FILES in `ls`; do NEWNAME=`echo ${FILES} | sed -e 's/*2011*/*2012*/'`; echo ${FILES} ${NEWNAME}; done;

しかし、これは:

for FILES in `ls`; do NEWNAME=`echo ${FILES} | sed -e 's/File_2011*/File_2012*/'`; echo ${FILES} ${NEWNAME}; done;

では、変更したいファイル名の部分の前にあるワイルドカードが機能しないのはなぜですか?

4

1 に答える 1

5

sed はFile willcard (bash や DOS のように) ではなく、regex (正規表現) を使用するためです。

できますsed -e 's/2011/2012/'(デフォルトでは、sedの「s」コマンドは文字列の一部に一致します)。ワイルドカードは正規表現言語の*ように記述されます。.*

sed 正規表現の基本ルール:

  • キャレット ( ^) は行頭に一致します。
  • ドル記号 ( $) は、行末に一致します。
  • アスタリスク ( *) は、前の文字の 0 回以上の出現と一致します。
  • ドット ( .) は任意の文字に一致します。
  • []は、文字のセットに一致するために使用されます。たとえば、、、、、または[a-c01]のいずれかの単一の文字に一致します。abc01
于 2012-05-02T11:25:07.470 に答える