次のように、perlスクリプトでawkコマンドを使用したいだけです。
$linum = `awk -F "%" '/^\s*kernel/{print NR}' < $grubFile`;
しかし、それは言うでしょう:Unrecognized escape \s passed through at ./root line 36.
どうすればそれを避けることができますか?ありがとうございました。
$x = `... \s ...`;
以上の意味はありません
$x = "... \s ...";
2文字\
とが必要な場合は、二重引用符で囲まれたリテラルなどでs
エスケープする必要があります。\
あなたが使うのと同じように
$x = "... \\s ...";
あなたが使用する必要があります
$x = `... \\s ...`;
内容も完全にエスケープできないことに注意してください$grubFile
。ファイル名にスペースが含まれていると、コマンドは失敗します。また、シェルに固有の他の文字(。など)が含まれている場合は、代わりに何が発生する可能性があるかを検討して|
ください。
@ysthが示したように、以下はコマンドと同等です。
awk -F% '/^\s*kernel/{print NR}' "$grubFile"
入力リダイレクトを取り除くことは、あなたが単に使うことができることを意味します
use IPC::System::Simple qw( capturex );
my @line_nums = capturex('awk', '-F%', '/^\s*kernel/{print NR}', $grubFile);
chomp @line_nums;
ちなみに、Perlだけでそれを行うのはそれほど難しいことではありません。
my @line_nums;
open(my $fh, '<', $grubFile) or die $!;
while (<$fh>) {
push @line_nums, $. if /^\s*kernel/;
}