開始パターンが異なる行を削除する方法は?

開始パターンが異なる行を削除する方法は?

複数行を含む大容量ファイルがあり、次のいずれかの条件に該当するすべての行をエスケープ(削除)したいと思います。

  1. /*!はまたはで始まります。'/*!
  2. 行はで始まり#、その後に1つ以上の(+)スペース、数字、または数字が続きます。

以下を使用していますが、egrep -vすべての試みが失敗しました。

cat File.log | egrep -v '^(/*!)|^(#[ a-zA-Z0-9]+)'

答え1

あなたはこれを試すことができますgrep

$ grep -Ev "^'?/\*!|^#[ [:alpha:][:digit:]]+" input_file

答え2

使用できる

grep -vE "^'"'?/\*!|^#[ a-zA-Z0-9]+' file

または

grep -vE ^\''?/\*!|^#[ a-zA-Z0-9]+' file

^'パターンの周りに一重引用符を挿入して使用するのは難しく、最初の部分に二重引用符を使用し、その後パターン部分に一重引用符を使用しました。 2番目の例では、^文字通りの意味が維持され、開始前に'エスケープされます。\''

POSIX文字クラスを使用でき、[:alnum:]タブ[a-zA-Z0-9]とスペースを一致させるには、次のものを使用できます[:blank:]

grep -vE "^'"'?/\*!|^#[[:blank:][:alnum:]]+' file

関連情報