以下のようなファイルがあり、パターン「Unix」を検索し、パターンが一致する行の 2 行後に別のファイルの内容を挿入したいと考えています。でやりたいsed
。
$ cat text1
Unix
Windows
Database
Wintel
Sql
Java
$
出力は
Unix
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java
以下のようなファイルがあり、パターン「Unix」を検索し、パターンが一致する行の 2 行後に別のファイルの内容を挿入したいと考えています。でやりたいsed
。
$ cat text1
Unix
Windows
Database
Wintel
Sql
Java
$
出力は
Unix
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java
少し変に見えますが、これは GNUsed
と BSD sed
(Mac OS X 上) の両方で動作し、ほとんどのバージョンで動作するはずですsed
:
sed -e '/Unix/{N;N;p;r content' -e 'd;}' data
または:
sed -e '/Unix/{
N
N
p
r content
d
}' data
これらのN
コマンドは、パターン スペースに余分な行を追加します (したがって、パターン スペースにはUnix
、Windows
およびを含む 3 行が保持されますDatabase
)。このp
コマンドはパターン スペースを出力します。ファイルのr content
内容を読み取り、出力に追加します。パターンスペースをd
削除します。これらの{}
操作をグループ化して、入力行が一致した場合にのみ発生するようにしますUnix
。
は、示されているように、スクリプトの行の最後、または引数r content
の最後にある必要があります。-e
セミコロンを追加しようとしてもうまくいきません (結局のところ、ファイル名にセミコロンが含まれている可能性があります)。
これはうまくいくかもしれません(GNU sed):
sed '/Unix/!b;n;n;r another_file' text1
unix
行に救済が含まれていない場合。それ以外の場合は、印刷して次の行を取得し、繰り返してから 2 番目のファイルを読み取ります。
注意:unix
これは現在のサイクルの一部であるため、次の 2 行目が最初にanother_file
出力され、現在のサイクルの終了に続くパターン スペースに挿入されます。