2016-12-22 1 views
0

У меня есть файл, который содержит 2 строкиMatch строка, копия строки на следующую строку и изменить строку с использованием СЭД

  • Line1: «Меня зовут ABCD».
  • Линия2 «Меня зовут XYZ».

Я хочу скопировать все строки со строкой «Мое имя» и вставить всю строку на следующей строке, а также изменить строку с новой строкой. EG: Новый файл должен выглядеть следующим образом:

  • Line1: "Меня зовут ABCD"
  • Line2: "Меня зовут ABCD и возраст 2"
  • Line3: "Меня зовут XYZ"
  • line4: "Меня зовут XYZ и возраст 2"
+0

См. [Edit-help] (http://stackoverflow.com/editing-help). – Cyrus

+0

Пожалуйста, взгляните на: [Что делать, если кто-то отвечает на мой вопрос?] (Http://stackoverflow.com/help/someone-answers) – Cyrus

ответ

0
#!/usr/bin/awk -f 
1 
{ 
    print $0, "and age 2" 
} 

Или:

#!/bin/sh 
awk '1 {print $0, "and age 2"}' file 
0

Попробуйте это:

sed 's/My name.*/&\n& and age 2/' file 

Пояснение:

  • Узор: My name.* поиска строк, содержащие My name следует любым символы .*
  • Замена: & заменяет совпадающую строку, за которым следует newline \n, после чего следует строка соответствия \&, а затем and age 2

Для редактирования файла вместо, добавьте -i флаг:

sed -i 's/My name.*/&\n& and age 2/' file 
+0

Awesom! Спасибо, что это было сделано. Если мне нужно вставить «и возраст 2» после «есть» в строке, какая должна быть модификация указанной выше команды? – Sameer

+0

Вставить после: 'sed '/ Мое имя/p; s // & и возраст 2 /' файл' – SLePort

+0

Извините, что выше не работает. Я имел в виду: в моем первоначальном вопросе скопированная строка добавила «и возраст 2» после всей исходной строки. Теперь я хочу снова выполнить сопоставление строк (с «is») для скопированной строки и вставить «и возраст 2», после чего остальная часть строки будет скопирована из более ранней строки. – Sameer

0

Не могли бы вы попробовать следующее и дайте мне знать, если это поможет.

awk '{Q=$0;sub(/\".$/," and age 2\".",Q);print $0 ORS Q}' Input_file