Відповіді:
якщо рішення не обмежується 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
}'
Існує багато способів зробити це.
Напевно, найпростішим є перетворення початкового файлу в єдиний (дуже довгий рядок), замінивши новий рядок на інший символ (я використовую cap ^, оскільки це досить нешкідливо в цьому контексті), шукаючи та замінюючи n-е виникнення шукати рядок, а потім повертати нові рядки на їх місце.
Це можна зробити за допомогою однієї команди:
tr '\n' '^' < my_file | sed 's/Sometexts/ r newtext.txt/2' | tr '^' '\n' > new.txt
Ви також можете зробити це з awk, або на одній лінії з sed, але це швидко стає безладним.
Редагувати: якщо ви боїтесь використання ^, ви можете використовувати цю команду:
sed ':a;N;$!ba;s/Sometexts/ r newtext.txt/2' file
my_file
міститься який-небудь власний '^', це буде обробляти файл додатковими новими рядками ...