web-dev-qa-db-ja.com

ファイル内のテキストを検索して別のファイルにコピーする

Linuxでファイル内のテキストを検索し、見つかった場合は別のファイルにコピーするコマンドはありますか?

sed -iを使用してテキストを見つけることができますが、行全体を別のファイルにコピーする方法は?

1
jordan

sed -iは使用しないでください。元のファイルが上書きされます。

代わりにgrepを使用してください。

grep "text to find" input.txt > output.txt
5
cadrian

デフォルトでは、sedstdoutに出力します。ファイルに出力するには、sedstdout>演算子(新しいファイルを作成する場合)または>>演算子(出力を既存のファイルに追加する場合):

sed '/text/' inputfile > outputfile
sed '/text/' inputfile >> outputfile
2
kos

Grepを使用できます。 source_fileファイルを検索したいとします。検索したい行がある2番目のファイルはinput_fileです。使用する

    grep -f input_file source_file > output_file

あなたのsource_fileが

    Humpty Dumpty sat on a wall
    Humpty Dumpty had a great fall
    All the King's horses and 
    All the Queen's men
    COuld not put Humpty together again

そして入力ファイルは

    Humpty
    Queen

あなたの出力ファイルは

    Humpty Dumpty sat on a wall
    Humpty Dumpty had a great fall
    All the Queen's men
    COuld not put Humpty together again
0
amisax

sed -iはインプレース編集用です。

man sedから

-i[SUFFIX], --in-place[=SUFFIX]
      edit files in place (makes backup if SUFFIX supplied)

sedは良い選択ですが、awkを使用することもできます

 awk '/<your_pattern>/' foo > bar

$ cat foo
foo bar foobar
bar foo bar
bar foo

$ awk '/foobar/' foo > bar

$ cat bar
foo bar foobar
0
A.B.