テキストファイル内の単語に一致する行を検索する

テキストファイル内の単語に一致する行を検索する

grepなどを使用して、テキスト文書のどの行がパターンに一致する特定の単語であるかを判断する方法はありますか?ありがとうございます。

答え1

-nはい、オプションがありますgrep

~からman grep:

-n, --line-number
              Prefix each line of output with the 1-based line number within its input file.

たとえば、次のファイルがあるとしますfile.txt

this is
foo test
and this is
bar test

電流出力grep -n "test" file.txt

$ grep -n "test" file.txt 
2:foo test
4:bar test

ここで、2と4はパターンが見つかった行番号を表します。

答え2

このgrep方法は最も簡単ですが、一致する行の行番号を印刷しますpat

  1. 真珠

     perl -lne 'print $. if /pat/' file
    
  2. アッ

     awk '/pat/{print NR}' file
    
  3. sed

     sed -n '/pat/=' file
    

答え3

使用幸せ(以前のPerl_6)

raku -ne 'state $i=0; ++$i; put $i if /pat/;' 

上記のRakuコードは、一致する行の行番号を各一致ごとにpat1つずつ印刷します。すべての一致を1行に表示するには、にput $i置き換えますprint "$i "

説明すると、Perlの多くの特殊変数がRakuから省略されました。対照的に、Rakuはstate変数を一度だけ開始することを可能にします。この構文とセミコロンで区切られた「Cに似た」構文は、Rakuの条件付き行番号付けに使用できます。上記の最初の文では、$iキーワードを使用して変数を宣言しました。stateこれは、変数が一度初期化されることを意味します。このstateキーワードは既存のPerl / Rakuコマンドラインフラグとシームレスに機能するため、-ne2$i番目のステートメントでincrementを使用でき、++$i3番目のステートメントと一致する値を使用できます。$iput

Rakuの増分(非条件付き)行番号付けは、増減すること$ができる匿名状態変数(たとえば、++$または)を使用する他の方法によって行われます。$++したがって、一致するパターンの各インスタンスに番号を付ける操作は、次のように実行できます(Rakuの=>「fat-arrow」ハッシュコンストラクタを使用)。put代わりにsayタブ区切りの出力を取得するには、次のようにします。

raku -ne 'state $i=0; ++$i; say (++$ => $i) if /4/;' 

入力例(最初の行は空です):

0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789

出力例(上記の最終コード、 'ordinal-instance' =>'line-number'。put代わりにsayタブで区切られた値を取得するために使用):

1 => 6
2 => 7
3 => 8
4 => 9
5 => 10
6 => 11

https://docs.raku.org/syntax/state
https://raku.org

関連情報