たとえば、次のファイルがあります。
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
r
in の ("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
ありed
(sed
挿入するファイルのインデントが必要です)。また、ファイルの内部編集を実行して、元のファイルを変更されたコンテンツに置き換えます。
ed -s exam.txt <<END_ED
/propertie/r !sed 's/^/ /' file.txt
wq
END_ED
r
inコマンドは、コマンドの前に付くとed
外部コマンドの出力を読み取ることができます!
。これを使用して挿入するデータをインデントします。それ以外はsed
明らかな理由で上記の解決策と非常に似ています。
사용의 유일한 단점은 ed
일반적으로 매우 큰 파일에는 사용할 수 없다는 것입니다. sed
길이가 결정되지 않은 스트림을 편집하는 데 유용하며, ed
문서는 다른 편집기에서 열 수 있습니다(예: 크기가 메가바이트 또는 기가바이트가 아닌 파일).