0

最近、私はこの仕事をする必要があります:

ステップ1

たとえば、file_A で一致する文字列を見つけると、一致する文字列は "ILikeeStackoverflow" になります。

ファイル_A

……

ILikeStackoverflow

「ILikeStackoverflow」の後の行

.......

ステップ2

この文字列「ILikeeStackoverflow」が存在する場合は、別の file_B (10 行未満) をこの file_A のその文字列の直後にコピーします。

したがって、このコピーを実行した後、file_A は次の形状のようになります。

ファイル_A

……

ILikeStackoverflow

Line_1_of_file_B

Line_2_of_file_B

……

Line_n_of_file_B

「ILikeStackoverflow」の後の行

.......

私のコードはこれですが、正しく動作しません (現在のディレクトリの file_A と file_B の両方)。

      match_string="ILikeStackoverflow" 
      sed " /^$match_string/a"$file_B" " file_A 

提案をありがとう!

編集 :

今のところ、行き詰まった理由はわかっていますが、コードを修正する方法がわかりません。アイデアがあれば引き続きコメントしてください。どうもありがとうございます。

問題は、文字列が別の行を占めている場合にのみ、sat のコードが機能することです。一致した文字列が長い文字列の一部にすぎない場合、彼のコードは機能しません。たとえば、fileA がこのような場合、コードは機能しません。

ファイル_A

……

/テスト/開始/ILikeStackoverflow/テスト/終了

「ILikeStackoverflow」の後の行

.......

実際、私の「index.html」では、一致する文字列は「5000s-IntW300」ですが、一致した文字列を含む行は次のとおりです。

/blue-ccd-data/DAMIC_SNOLAB_RUN1/5000s-IntW300-OS

それを修正するための提案はありますか?

どうもありがとうございました!

編集2:

実際には、一致した文字列行よりも 1 行後の場所に fileB をコピーしたいと考えています。たとえば、実際の位置は次のようになります。

ファイル_A

……

/テスト/開始/ILikeStackoverflow/テスト/終了

この行には重要な情報が含まれているため、fileB をここにコピーしないでください。

これは、fileB の正確な行をコピーする必要があります。

.......

4

2 に答える 2

0

重要なのは、試合後に一行読むことであり、それはNコマンドで行われます。次にr、他のファイルのコンテンツ全体を挿入するために使用します。もともと私が試した:

sed '/Stackoverflow/ { N; r fileB };' fileA

しかし、次のエラーが表示されます:

sed: -e expression #1, char 0: unmatched `{'

sedそのため、コマンドでファイルを使用し、-fスイッチを使用してそれを呼び出しました。

の内容script.sed:

/Stackoverflow/ {
        N
        r fileB
}

そして、次のように実行します。

sed -f script.sed fileA

satのサンプル データに基づいて、次の結果が得られます。

sample
text
Stackoverflow
some
Line 1
Line 2
....
Line 10
text
于 2013-10-18T15:19:33.113 に答える