第 N 次出现时替换

第 N 次出现时替换

我有这个代码

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

这会将字符串“Sometexts”替换为文本文件 newtext.txt 的内容

但我想替换第二次出现的“Sometexts”字符串

我如何将其存档?

答案1

如果解决方案不仅限于sed,那么awk就是你的朋友,使用以下一行代码:

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
}' 

答案2

有很多方法可以做到这一点。

可能最简单的方法是将初始文件转换为单个(非常长的字符串),用另一个字符替换换行符(我使用 cap ^,因为在这种情况下它是无害的),搜索并替换搜索字符串的第 n 次出现,然后将换行符放回原位。

这可以通过一个命令完成:

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

您也可以使用 awk 来完成此操作,或者使用 sed 在一行上完成此操作,但很快就会变得混乱。

编辑:如果您害怕使用 ^,您可以使用这个单个 sed 命令:

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

相关内容