web-dev-qa-db-ja.com

行を読み取ってパターンと照合する

これはわかりません。ファイルのすべての行を調べて、変数で指定されたWordと一致しているかどうかを確認する必要があります

コマンドの読み取りから始めましたが、その後何を使用するのかわからないので、grepを試しましたが、誤って使用した可能性があります。

while read line; do 
if [ $condition  ] ;then echo "ok" fi
done<file.txt
6
applenic

ここにあなたのためのクイックがあります、単に私たちがやっていることは

1行目:ファイルを変数lineに読み取り中

2行目:正規表現に一致し、$lineをエコーし​​ます。「鳥」という単語に一致する場合は、その行をエコーし​​ます。このifステートメントで、ここで必要なアクションを実行します。

3行目:ファイルfoo.textをパイプ処理するwhileループの終わり

#!/bin/bash
while read line; do
  if [[ $line =~ bird ]] ; then echo $line; fi
done <foo.text

「鳥」は正規表現であることに注意してください。たとえば、bird.*Wordに置き換えると、同じ行を正規表現に一致させることができます。

foo.textという名前のファイルで、次の内容で試してください。

my dog is brown
her cat is white
the bird is the Word
7
dougBTV

これを行う簡単な方法は、grep(またはegrep)を使用することです。

grep bird file.txt
5
steviethecat

2つの引数(ファイル名と変数)を渡す簡単なスクリプトを次に示します...その下にハードコードされたバージョンもあります。

#!/bin/bash

[ $# -lt 2 ] && echo "wrong number of args" && exit 1
file=$1
var=$2
while read line; do
    if  echo "$line" | grep -q "$var"; then echo "ok"; fi
done < "$file"
exit 0

[user@myserver ~]$ myscript file.txt some_text

または、引数として渡すのではなく、ファイル(および変数)をハードコーディングしたい場合...

while read line; do
    if  echo "$line" | grep -q "some_text"; then echo "ok"; fi
done < file.txt
0
Bradley D