1

Perl のインストールに付属している便利な名前変更ユーティリティがあります。Perl 正規表現にカウンターを追加するにはどうすればよいですか? これは、現在のディレクトリ内のファイルの番号付けの問題などに関連する質問です。

rename 's/^/<here I'd like to have a number of a file being processed>/g' * 

たとえば、次のように名前を変更します。

fileA
fileB
fileC

1 - fileA
2 - fileB
3 - fileC

編集

カウンター機能 ($c変数) を追加しました - こちらをご覧ください。正常に動作しますが、カウンター形式を指定しようとすると:

rename_c.pl -c 5.2f 's/^/$c - /' * 

それは言います:

 Useless use of concatenation (.) or string in void context at line 120. 

そして、私が使用するように指示した形式を実際には使用しません。これは 120 行目の単純な構文ミスに違いありません。

4

4 に答える 4

4

基本的な名前変更ユーティリティは、その状況を問題なく処理できます。

$ rename '$_ = sprintf "%d - %s", ++$count, $_' files...
于 2011-11-27T15:33:08.283 に答える
3

問題のコード行は次のとおりです。

$c = sprintf(eval("%" . "$form", $cNumber));

あなたはそこにいたくありませんeval。フォーマットを文字列として簡単に作成できます。

$c = sprintf("%$form", $cNumber));

文字列 (最初の引数) には、要求された形式とそれを使用する形式が含まれsprintf()ます$cNumber

于 2011-11-27T16:13:18.590 に答える
0

perl自体にアクセスできる場合は、perl ワンライナー

txtファイルのリストの予行演習

perl -le '($old=$_) && s/^/++$n."-$`"/eg && print for <*.txt>'

名前を変更

perl -le '($old=$_) && s/^/++$n."-$`"/eg && rename($old,$_) for <*.txt>'

  • perl -leワンライナーを実行する
  • ($old=$_)古い名前を保存する
  • s/^/++$n."-$`"/eg置換を行う | バックティックがあることに注意してください
    • /^/物乞いにマッチ
    • ++$nカウンターを1から始める
    • ."-$`"これにカウンターを追加
    • /egグローバルに実行さeれ、評価用です
  • rename($old,$_)$old=>の名前を変更$_
  • for <*.txt>txtファイルのリストをループ

このパターンですべての名前を変更でき、高度な名前変更にも使用できsprintfます。

スクリーンショット

ここに画像の説明を入力

于 2021-03-16T13:52:24.397 に答える