これは行番号を返しますが、文字列にあります。
grep -n -F -w $word $file | cut -d : -f 1
ベストアンサー1
私はandのawk
代わりにこれを使います。行番号を配列に入れるには、次のようにします。grep
cut
プロセスの交換とbashの組み込み(mapfile
in bashの同義語はbashで実行するとbashよりも優れており、詳細なヘルプを得ることができます)。たとえば、mapfile
readarray
help mapfile
help readarray
mapfile -t array < <(awk -v w="$word" '$0 ~ w {print NR}' "$file")
または、正規表現マッチングの代わりに固定文字列マッチングを使用します。
mapfile -t array < <(awk -v w="$word" 'index($0,w) {print NR}' "$file")
どちらも$word
awk のオプションを介して awk 変数にシェル変数を渡すので、含まれる文字列は何でも安全です。二重引用符で囲まれたawkスクリプトで$ wordを使用するよりもはるかに安全です。w
-v
FNR
注:入力ファイルが複数ある場合は、代わりに印刷できますNR
。 NRは、これまで読んだすべての行の累積合計です。 FNRは行番号です。現在のファイルただ。 (私が「行」と言うとき、実際には「レコード」を意味します。なぜなら、awkは改行で区切られたレコードを含むプレーンテキストファイル以上を処理できるからです。)