以下のようなファイルがあり、パターン「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出力され、現在のサイクルの終了に続くパターン スペースに挿入されます。