파일의 특정 문자열 뒤에 파일 내용을 삽입하는 방법은 무엇입니까? [복사]

파일의 특정 문자열 뒤에 파일 내용을 삽입하는 방법은 무엇입니까? [복사]

たとえば、次のファイルがあります。

cat exam.txt

I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
centos less then redhat
fedore what
my name is moon yea

プロパティ行の後にファイルの内容をfile.txtとして追加したいと思います。

cat file.txt

324325
5326436
3245235
646346
545
643
6436
63525
664
46454

だから私は次を試してみます。

a=` cat file `

sed -i '/propertie/a  `echo "$a"` ' exam.txt

しかし、うまくいきません

特定の文字列の後にファイルの内容を追加するためのsed / awk / perlライナーの提案はありますか?

期待される出力

I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
    324325
    5326436
    3245235
    646346
    545
    643
    6436
    63525
    664
    46454
centos less then redhat
fedore what
my name is moon yea

答え1

Unixシェルスクリプトの変数にファイルの内容全体を保存したくないでしょう。これを行う場合は、他の回避策があるかどうかを確認してください。自分が見つからない場合は、ここに来てみてください:-)


$ sed '/propertie/r file.txt' exam.txt
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
324325
5326436
3245235
646346
545
643
6436
63525
664
46454
centos less then redhat
fedore what
my name is moon yea

rin の ("read") コマンドは、sedファイル名を引数として使用し、ファイルの内容を現在のストリームに挿入します。

file.txt追加されたコンテンツをインデントする必要がある場合は、次を実行する前にコンテンツをインデントする必要がありますsed

$ sed 's/^/    /' file.txt >file-ind.txt
$ sed '/propertie/r file-ind.txt' exam.txt
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
    324325
    5326436
    3245235
    646346
    545
    643
    6436
    63525
    664
    46454
centos less then redhat
fedore what
my name is moon yea

ありedsed挿入するファイルのインデントが必要です)。また、ファイルの内部編集を実行して、元のファイルを変更されたコンテンツに置き換えます。

ed -s exam.txt <<END_ED
/propertie/r !sed 's/^/    /' file.txt
wq
END_ED

rinコマンドは、コマンドの前に付くとed外部コマンドの出力を読み取ることができます!。これを使用して挿入するデータをインデントします。それ以外はsed明らかな理由で上記の解決策と非常に似ています。

사용의 유일한 단점은 ed일반적으로 매우 큰 파일에는 사용할 수 없다는 것입니다. sed길이가 결정되지 않은 스트림을 편집하는 데 유용하며, ed문서는 다른 편집기에서 열 수 있습니다(예: 크기가 메가바이트 또는 기가바이트가 아닌 파일).

関連情報