N番目の発生時に置換


0

私はこのコードを持っています

sed '/Sometexts/ r newtext.txt' old.txt > new.txt

これにより、文字列「Sometexts」がテキストファイルnewtext.txtの内容に置き換えられます

しかし、私は「Sometexts」文字列の2番目の出現で置き換えたい

アーカイブする方法は?

回答:


1

溶液はこれらに限定されていない場合sedは、awk以下のonelinerとあなたの友人は、次のとおりです。

awk 'BEGIN{file="NewText.txt";}{if(/SOMETEX/) count++; if(count==2){while((getline<file)>0) {print};count++;} else print;}' OldText.txt > new.txt

それが何をする:

awk 'BEGIN{file="NewText.txt";} #sets the path to the 
                                file that will be inserted
{if(/SOMETEX/) count++; #counts occurences of SOMETEX (regex-matching)
 if(count==2) #if we just found the second occurence then
{while((getline<file)>0) {print};count++;}  #read all lines of 
                                             file and print them
else print; #otherwise just print the line
}' 

1

これを行うには多くの方法があります。

おそらく最も簡単なのは、改行を別の文字に置き換えて(このコンテキストではかなり無害なのでcap ^を使用)、n番目の出現を検索して置換することにより、初期ファイルを単一の(非常に長い文字列)に変換することです文字列を検索してから、改行を元の場所に戻します。

これは、単一のコマンドで実行できます。

 tr '\n' '^' < my_file | sed 's/Sometexts/ r newtext.txt/2' | tr '^' '\n' > new.txt

awkまたはsedを使用して1行で実行することもできますが、すぐに面倒になります。

編集:^を使用するのが怖い場合は、この単一のsedコマンドを使用できます。

 sed ':a;N;$!ba;s/Sometexts/ r newtext.txt/2' file

my_file独自の '^'が含まれている場合、これは追加の改行でファイルをマングルします...
Legionair

@Legionairは、別のキャラクターを使用するか、編集で追加した新しいクーマンドを回答に使用できます。
MariusMatutiae

これは、newtext.txtからのテキストではなく「newtext.txt」を文字列として置き換える問題です。
キングメーカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.