2014-10-31 3 views
0

У меня есть сценарии, содержащие следующую строку:SED вставить новую строку после шаблона

echo + /etc>>$BUFFER 

Я хотел бы изменить их с СЕПГ и вставить другую строку сразу после этого:

echo + /etc>>$BUFFER 
    echo - /etc/cache>>$BUFFER 

и оставить остальная часть файла была такой. Что такое regexp SED для этого?

+0

не ясно, что вы имеете в виду и то, что ваши примеры хотите показать. – fedorqui

+0

Oke, я изменил свое оригинальное сообщение. – munin24

+1

Возможный дубликат [Вставить строку после первого совпадения с помощью sed] (http://stackoverflow.com/questions/15559359/insert-line-after-first-match-using-sed) – fedorqui

ответ

0

Если я правильно вас понял, что это должно работать:

sed 's/echo \+ .*etc>>\$BUFFER/echo + \/etc>>\$BUFFER\necho - \/etc\/cache>>\$BUFFER/' 

Это не может быть, самое лучшее решение (не знаю, как иметь дело с прямой косой черты в шаблоне IM - theorethically должно быть достаточно, чтобы избежать его люблю: \/ но странно это не работает)
Это должно работать, хотя

1
sed -i '$a echo - /etc/cache>>$BUFFER' myfile.txt 

в $ говорит последняя строка и это добавляет параметр -i записывает файл на месте.

Если вы хотите, чтобы матч в любом месте вы можете адресовать его с регулярным выражением// как это просто убедитесь, спасаясь от/как /, так как СЕПГ ожидает, что регулярное выражение будет воплощено в//

sed -i '/echo + \/etc>>$BUFFER/a echo - /etc/cache>>$BUFFER' myfile.txt

Поскольку в скобке (копия &) вышеуказанного оператора опускается пробел перед первым знаком + (вероятно, из-за ошибки в программном обеспечении, которое запускает сообщения на этом сайте) - вот версия, которая должна работать при копировании):

sed -i '/echo \ + \/etc>>$BUFFER/a echo - /etc/cache>>$BUFFER' myfile.txt

, или если вы хотите избежать побега в одиночном переднем разрезе в будущем (не очень полезно в этом случае с его единственного, но если у вас много передних косых черт - снова странное экранированное пространство происходит только из-за ошибки в программное обеспечение данного веб-сайта (или мой браузер Firefox), если ввести его в командной строке вы можете поставить интервал в два раза себя, как он появляется в аскеров вопрос):

sed -i '\@echo \ + /etc>>[email protected] echo - /etc/cache>>$BUFFER' myfile.txt

+0

Последнее утверждение (введено и отображается) правильно, но если вы (копируете и вставляете) текст, у него отсутствует пробел перед знаком +, возможно, из-за ошибки в программном обеспечении блога. –

0
sed -i '\#^ *echo + /etc>>\$BUFFER *$# a\ 
echo - /etc/cache>>$BUFFER' YourFile 
  • это будет добавьте строку после КАЖДОГО появления echo + /etc>>$BUFFER.
  • Я просто добавить разделитель строки ограничить только этого конкретного содержания линии (но может иметь заголовок или завершающие пространство)
Смежные вопросы