2015-05-22 5 views
5

У меня есть файл с ниже информациейCommand для вставки строки перед первым матчем

testing 
testing 
testing 

Я хочу, чтобы вставить слово (испытано) перед первым тестированием слова, используя SED или любого Linux Command

необходимости получить выход как

tested 
testing 
testing 
testing 

Благодарности

+1

@ mklement0: Да, я видел это потом. Думаю, именно поэтому я не мог читать вопросы в 4 часа ночи :). Виноват. Благодаря! –

ответ

4

Ровно:

sed '0,/testing/s/testing/tested\n&/' file 

Для строк, содержащих "тестирование":

sed '0,/.*testing.*/s/.*testing.*/tested\n&/' file 

строки, начинающиеся с "тестирования"

sed '0,/^testing.*/s/^testing.*/tested\n&/' file 

Fo г строки, заканчивающиеся «тестирования»:

sed '0,/.*testing$/s/.*testing$/tested\n&/' file 

Чтобы обновить содержимое файла с результатом добавления «-i», например:

sed -i '0,/testing/s/testing/tested\n&/' file 
6

Это может работать для вас (GNU СЭД):

sed -e '/testing/{itested' -e ':a;n;ba}' file 

Вставьте tested перед первым матчем testing, а затем использовать цикл для чтения/печати оставшейся части файла.

Или использовать GNU конкретны:

sed '0,/testing/itested' file 
5

Чтобы обеспечить -На альтернативу awk, что проще понять:

awk '!found && /testing/ { print "tested"; found=1 } 1' file 
  • found используется для отслеживания ли первой инстанции от testing (переменная found, как и любая переменная Awk, по умолчанию 0, то есть false в булевом контексте).
  • /testing/ поэтому соответствует первой строку, содержащую testing, и обрабатывает соответствующий блок:
    • { print "tested"; found=1 } печатает требуемый текст и устанавливает флаг, что первая testing линия была найдена
  • 1 является общая сокращенность для { print }, т. е. просто печать текущей строки ввода как есть.
Смежные вопросы