GNU/Linux >> Linux の 問題 >  >> Linux

Linux - 特定の行からファイルの最後までの grep

<ブロック引用>

「2A 行目」からファイルの最後まで「grep」したい:

sed -n '/2A/,$p'
  • -n :sed を抑制 デフォルト出力
  • /2A/ :「2A」を含む最初の行から出力します
  • $ :ファイルの最後まで
<ブロック引用>

「行 2A」から「A」を含む次の行まで「grep」したい:

sed -n '/2A/,/A/p'
  • /A/ :行に「A」が含まれるまで出力します
<ブロック引用>

「A」を含む最初の行から次の行まで「grep」したい:

printf "/A\n.+1,/A/p\nq" | ed -s
$ > foo echo "line 1
line 2A
line 3
line 4A
line 5"

$ sed -n '/2A/,$p' foo
line 2A
line 3
line 4A
line 5

$ sed -n '/2A/,/A/p' foo
line 2A
line 3
line 4A

$ printf "/A\n.+1,/A/p\nq" | ed -s foo
line 2A
line 3
line 4A

(コメントから展開)

awk GNU-awk (gawk) マニュアルで説明されているように、このニーズに完全に一致する行の「範囲」を選択する機能があります。 (この機能は他の awk でも動作します) gawk マニュアルへのリンクは簡単です。)

awk '/line 2A/,0' line 2A に一致する最初の行から始まる行を出力します 0 であるため、入力の最後まで続行します 決して真ではない条件です。

awk '/line 2A/,/A/&&!/line 2A/' line 2A に一致する行から印刷を開始します A に一致する行の後に停止します ただし、line 2A ではありません (したがって、開始行と同じ行にすることはできません)。 再開します その後 line 2A 等々;それを防ぎたい場合は、もう少し複雑な方法があります。

停止行に常に 2 以外の文字がある場合 A の前 これは awk '/line 2A/,/[^2]A/' に簡略化できます これは、2 以外の任意の文字に一致する行の後に停止し、その後に A が続きます。 WHAT のように、2A とは異なる任意の 1 桁の A で停止しますが、他のものではありません;そのため、停止条件は ,/line [013-9]A/ かもしれません .


grep を使用するのが最善の方法だと思います cut と組み合わせて と tail .まず、grep を使用して、目的の文字列 (-n) がある行を取得します。 行番号を出力します。 -m 1 最初の一致後に検索を停止するには):

grep -n -m 1 "somestring" filename.txt

これにより、行番号と文字列自体が出力されます。文字列を切り取るには、cut (-f1 :最初のフィールドを出力します。 -d: 区切り文字として「:」を使用):

grep -n -m 1 "somestring" filename.txt | cut -f1 -d:

次に、このコマンドの出力を末尾のパラメーターとして使用します。通常、tail は最後の k 行を出力しますが、 -n +k を使用します 、k 行目以降に表示する tail を取得します。コマンドの合計は次のとおりです:

tail -n +`grep -n -m 1 "somestring" filename.txt | cut -f1 -d:` filename.txt

somestring までの行を出力するには head を使用 tail の代わりに そして -n -# -n +# の代わりに .両方を組み合わせて、ある文字列から別の文字列までの行を取得することもできます.


Linux
  1. Linuxコマンドラインでのパイプの操作

  2. LinuxコマンドラインからのI/Oレポート

  3. LinuxコマンドラインからのGoogleドライブの使用

  1. ファイルの行をループする方法は?

  2. Linuxの「cat」コマンドを使用して、特定の行のみを番号で表示するにはどうすればよいですか。

  3. データファイルからランダムに特定の数の線を描画しますか?

  1. Vimでファイルの最初または最後に移動する[クイックヒント]

  2. コマンドラインからのLinuxサーバーの移行

  3. Linux - ファイルの末尾に空行があるかどうかを確認する