2014-02-03 2 views
0

Мне интересно, можно ли вставить некоторый текст в середине текстового файла после первого вхождения строки поиска с использованием GNU СЕПГ.Вставить текст в середине текстового файла после первого появления строки поиска с помощью sed

Так, например, если строка поиска «Привет», я хотел бы вставить строку сразу после первого появления «Hello» на новой линии

Hello John, How are you? 
.... 
.... 
.... 
Hello Mary, How are you doing? 

Строка будет введён после «Привет, Джон, как дела?» на новой линии

Спасибо,

+0

возможного дубликата [Как добавить строку текста в середину файла с помощью Баша?] (http://stackoverflow.com/questions/6739258/how-do-i-add-a-line-of-text-to-the-middle-of-a-file-using-bash) –

ответ

1

Вы могли бы сказать:

sed '/Hello/{s/.*/&\nSomething on the next line/;:a;n;ba}' filename 

для того, чтобы вставить строку после первого появления нужной строки, например Hello как на ваш вопрос.

Для ваших данных выборки, было бы произвести:

Hello John, How are you? 
Something on the next line 
.... 
.... 
.... 
Hello Mary, How are you doing? 
1

Использование СЭД:

sed '/Hello John, How are you?/s/$/\nsome string\n/' file 
Hello John, How are you? 
some string 

.... 
.... 
.... 
Hello Mary, How are you doing? 
+0

Спасибо за ваш ответ, Я выбрал ответ devnull, потому что он более общий. – Jeanno

+0

Не знаете, что общего в моем или его ответе, оба производят тот же результат. Но для лучших портативных решений всегда рассматривайте awk над sed. – anubhava

1

Использование awk

awk '/Hello/ && !f {print $0 "\nNew line";f=1;next}1' file 
Hello John, How are you? 
New line 
.... 
.... 
.... 
Hello Mary, How are you doing? 

Этот поиск ужалить Hello и если флаг f является не истинно (по умолчанию при запуске)
Если это правда, напечатайте строку, распечатайте дополнительный текст, установите флаг f в true, перейдите к следующей строке.
В следующий раз Hello Найдено: f - это правда, и ничего лишнего не будет сделано.

1
sed '/Hello/ a/ 
Your message with/
New line' YourFile 

a/ для добавления (после) ваш шаблон, чтобы найти, i/ для instert (до)

Смежные вопросы