私はこれを見つけることができません。ファイルの各行を見て、変数で指定された単語と一致することを確認する必要があります。
commandで始めましたが、read
それ以降は何を使うべきかわかりません。試してみましたが、grep
間違って使用している可能性があります。
while read line; do
if [ $condition ] ;then echo "ok" fi
done < file.txt
答え1
簡単な紹介をしたら、私たちがやっていることは次のとおりです。
行1:ファイルを変数として読み込むときline
行2:正規表現と一致し、$line
「bird」という単語と一致すると、その行をエコーします。このifステートメントで必要なすべての操作を実行してください。
行3:whileループが終わってファイルにパイピングfoo.text
#!/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
答え2
より簡単な方法はgrep
(またはegrep
)を使用することです。
grep bird file.txt
答え3
以下は、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
答え4
sed
別のオプションは、各行で実行する処理によって異なります。sed
ただし、すでにすべての行で使用する予定がある場合にのみお勧めします。
sed -n '/regex/p' foo.text
私は-n
通常の出力を抑制するためにsedのオプションを使用しています。このコマンドを使用して、p
一致する行のみを印刷します。
編集コマンド(処理を意味します)と組み合わせることもできます。
sed -n '/regex/{s/pattern/replacement/;p}' foo.text
各行について何もしたくない場合は同意します。猫スティービーの答えこれがgrep
最もクリーンで高速な最高のソリューションです。
grep regex foo.text
追加のUnixコマンドが必要な処理を実行するには(そしてそのような場合にのみ)read
。