0

以下のようなファイルがあり、パターン「Unix」を検索し、パターンが一致する行の 2 行後に別のファイルの内容を挿入したいと考えています。でやりたいsed

$ cat text1
Unix 
Windows
Database
Wintel
Sql
Java
$

出力は

Unix 
Windows
Database
CONTENT OF ANOTHER FILE
Wintel
Sql
Java
4

2 に答える 2

1

少し変に見えますが、これは 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コマンドは、パターン スペースに余分な行を追加します (したがって、パターン スペースにはUnixWindowsおよびを含む 3 行が保持されますDatabase)。このpコマンドはパターン スペースを出力します。ファイルのr content内容を読み取り、出力に追加します。パターンスペースをd削除します。これらの{}操作をグループ化して、入力行が一致した場合にのみ発生するようにしますUnix

は、示されているように、スクリプトの行の最後、または引数r contentの最後にある必要があります。-eセミコロンを追加しようとしてもうまくいきません (結局のところ、ファイル名にセミコロンが含まれている可能性があります)。

于 2013-09-13T04:18:12.660 に答える
0

これはうまくいくかもしれません(GNU sed):

sed '/Unix/!b;n;n;r another_file' text1

unix行に救済が含まれていない場合。それ以外の場合は、印刷して次の行を取得し、繰り返してから 2 番目のファイルを読み取ります。

注意:unixこれは現在のサイクルの一部であるため、次の 2 行目が最初にanother_file出力され、現在のサイクルの終了に続くパターン スペースに挿入されます。

于 2013-09-13T05:54:34.707 に答える