Вставка текста перед вторым появлением слова в файле - PullRequest
2 голосов
/ 16 октября 2019

Я использую Fedora 30 и хочу написать скрипт bash. У меня есть файл с тестовыми данными

asdf
asdf
[test]
asdasd
[test]


asdasd

Я хочу вставить "lineToInsert" перед вторым появлением [test]

Пока у меня есть

myVar="lineToInsert"

sed  '/\[test\]/i'$myVar inputTest > test.txt

Проблема в том, что эта вставка "lineToInsert" перед каждым появлением [test]. В результате

asdf
asdf
lineToInsert
[test]
asdasd
lineToInsert
[test]


asdasd

Что я хочу это

asdf
asdf
[test]
asdasd
lineToInsert
[test]


asdasd

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Не могли бы вы попробовать следующее, если вы в порядке с awk

awk -v var="$myVar" '/\[test\]/ && ++count==2{print var ORS $0;next} 1' Input_file

Объяснение: Добавление объяснения приведенного выше кода здесь.

awk -v var="$myVar" '         ##Starting awk program here, defining var variable of awk which has value of myVar which is a shell variable.
/\[test\]/ && ++count==2{     ##Checking condition if a line has test in it and count is 2 then do following.
  print var ORS $0            ##Printing variable var then ORS and current line value here.
  next                        ##next will skip all further statements from here.
}                             ##Closing BLOCK for condition here.
1                             ##1 will print edited/non-edited current line.
' Input_file                  ##Mentioning Input_file name here.
0 голосов
/ 16 октября 2019

Вы можете сделать это, используя sed. ваш ввод в firstfile.txt результат в secondfile.txt

sed 's/\[test\]/\[test\]\nYOURSTRING\n/g' firstfile.txt > secondfile.txt
0 голосов
/ 16 октября 2019

Вы можете сделать это.

myVar="lineToInsert"
sed -e '/\[test\]/i '"${myVar}" inputTest
...