-1

雑誌 (Linux Shell Handbook) で見たものをテストしようとしています。私は実際にこのようなことを試したことはありませんが、これが役立つ可能性があることは知っています

例は

perl -n -e '/^The \s+(.*)$/ print "$1\n"' heroes.txt

hero.txt には

Catwoman
Batman
The Tick
Spider-Man
Black Cat
Batgirl
Danger Girl
Wonder Woman
Luke Cage
Ant-Man
Spider-Woman

そして、これはティックを表示するはずですが、私は得ています

perl -n -e '/^The \s+(.*)$/ print "$1\n"' heroes.txt
syntax error at -e line 1, near "/^The \s+(.*)$/ print"
Execution of -e aborted due to compilation errors.

どこが間違っていますか??

4

1 に答える 1

5

これを行う方が良い:

$ perl -lne 'print $1 if /^The\s+(.*)$/' heroes.txt
Tick

また

$ perl -lne '/^The\s+(.*)$/ && print $1' heroes.txt
Tick

元のコマンドにいくつかの間違いがあります:

perl -n -e '/^The \s+(.*)$/ print "$1\n"' heroes.txt
  • これは構文エラーです。m//( match演算子、delimitermと共に使用する場合は必須ではありません) の後に:を使用することはできません。/print
  • ifまたは&&(私の2つのスニペットのように)ステートメントを使用して、一致しない行を印刷しないようにすることをお勧めします
  • \sはすでにスペース (または空白文字) であるため、リテラルのスペースと空白文字の両方を繰り返さないでください。\s

action if condition;

の省略形です

if (condition) {action};
于 2013-03-27T15:15:47.410 に答える