2つの変数を開始パラメータと終了パラメータとして使用してテキストファイルから範囲を取得する

2つの変数を開始パラメータと終了パラメータとして使用してテキストファイルから範囲を取得する

テキストファイルから特定の行範囲を取得するためにgrepを使用しようとしています。行範囲は2つの変数で識別する必要があります。これまで、私はワイルドカード「*」を使ってこれをやってきました。失敗した試みの例は次のとおりです。 (最初の2つが機能しない理由がわかります。)

grep "$Var1"*"$Var2" file.txt     
grep "$Var1*$Var2" file.txt
echo "$Var1*$Var2" | grep file.txt

ベストアンサー1

grep複数行検索では機能しません。この仕事に適した他のツールがあります:awksed

パターンを維持するために変数を使用するので、状況は難しいかもしれません。まず、ハードコーディングモードを試してみてください。正しく設定したら、ハードコードされたパターンを変数に置き換えてください。


使用awk:

awk '/'"$Var1"'/,/'"$Var2"'/' file.txt

ハードコーディングモードで同じコマンドを使用して概念を説明します。

awk '/pattern1/,/pattern2/' file.txt

説明する:

  • /pattern1/,/pattern2/範囲です。範囲は一致する行で始まり、pattern1一致する行で終わりますpattern2
  • デフォルトでは、awk範囲内の行のみが印刷されます。

以下の詳細をご覧くださいawkhttp://www.catonmat.net/blog/awk-one-liners-explained-part-one/


使用sed:

sed -n '/'"$Var1"'/,/'"$Var2"'/ p' file.txt

ハードコーディングモードで同じコマンドを使用して概念を説明します。

sed -n '/pattern1/,/pattern2/ p' file.txt

説明する:

  • -nそうするように指示された場合は、sedに行のみを印刷してください。
  • /pattern1/,/pattern2/範囲です。範囲は一致する行で始まり、pattern1一致する行で終わりますpattern2。範囲の各行に対して、次のコマンドが実行されます。
  • 最後は印刷ラインをp教えてくれます。sed

以下の詳細をご覧くださいsedhttp://www.catonmat.net/blog/sed-one-liners-explained-part-one/


使用する必要がある場合は、Tellを使用してPerl正規表現エンジンを使用grepできます。マニュアルページにはこの機能の説明があります。-Pgrep

パターンをPerl互換正規表現(PCRE)として解釈します。これは非常に実験的であり、grep -Pは実装されていない機能について警告することができます。

おすすめ記事