web-dev-qa-db-ja.com

文字列を入力としてテキストから行を抽出する

sedなどを使用して、以下の正規表現文字列^liテキスト(ファイルではない)からに一致する行を抽出するにはどうすればよいですか?

 linux
 loan
 litmus
 launch

grepを試しましたが、テキストファイルではなく、引用されたテキスト内を検索する方法が見つかりませんでした。

grep -n -i "^li" "linux
loan
litmus
launch" 

No such file or directoryを返します。また、可能であれば、検索する前にこのテキストをファイルとして保存したくありません。

2
stacko

ここで herestring<<<)を使用して、文字列を入力としてgrepに渡す必要があります。ここで、herestringはファイル記述子を返し、grepは操作できます。その上で:

$ grep -ni "^li" <<<"linux
loan
litmus
launch"

出力:

1:linux
3:litmus

シェルがherestringsをサポートしていない場合、多くのシェルはサポートしていません。文字列を出力してgrepにパイプできます。

$ echo "linux
loan
litmus
launch" | grep -n -i "^li"
1:linux
3:litmus

または、ヒアドキュメント(<<)を使用します。

$ grep -ni "^li" <<EOF
> linux
> loan
> litmus
> launch
> EOF
1:linux
3:litmus
3
heemayl

sedを使用すると、sed -n '/^li/p'を使用できます

@heemaylの例を使用する

$ echo "linux
> loan
> litmus
> launch" | sed -n '/^li/p'
linux
litmus
0
tachomi

あなたはただすることができます:

grep \^li

そして、あなたのものをタイプし始めます。 grepは端末を読み取ります。 sedも同じことをします。使用する CTRL+Dそれらを停止し、... >saved_output_fileエフェクトを保存するためのリダイレクトを出力します。

0
mikeserv