このコマンドは次のとおりです。
sed -i "\|^pref\.fullscreen\.toolbarPixels|d" ~/.vmware/preferences
働く
しかし、このコマンドは:
perl -pi -e "\|^pref\.fullscreen\.toolbarPixels|d" ~/.vmware/preferences
私に出力を与える:
Backslash found where operator expected at -e line 1, near "pref\"
Backslash found where operator expected at -e line 1, near "fullscreen\"
syntax error at -e line 1, near "\|"
Execution of -e aborted due to compilation errors.
なぜ?
修正する:
test.txt ファイルには以下が含まれます。
melon
banana
peach
apple
このコマンドは次のとおりです。
perl -ni -e "print unless m|apple|; print unless m|banana|" test.txt
返品:
melon
melon
banana
peach
peach
apple
変える:
melon
peach
なぜ?
答え1
リンゴ/バナナ問題の場合、両方のステートメントはファイルの行で機能するため、重複が発生します。ステートメントフィルタが存在しないか重複melon
していますpeach
。
次のアプローチを使用すると、重複を防ぎ、必要な削除を達成できます。
$ perl -ni -e "print unless m/(apple|banana)/" test.txt
正規表現で可変性を移動する別の方法は次のとおりです。
$ perl -ni -e "print unless m/apple/ or m/banana/" test.txt
答え2
Perl は sed を直接置き換えるわけではありません。同様の構文をサポートしていs/pattern/replacement/
ますが、これは他のsedコマンドが機能するという意味ではありません。
あなたはこれを行うことができます
perl -ni -e "print unless m|^pref\.fullscreen\.toolbarPixels|"
私の考えではない、
perl -ni -e "print unless /^pref\.fullscreen\.toolbarPixels/"
非標準正規表現区切り文字を使用する特別な理由がないようです。