sed - вставьте строку перед шаблоном - PullRequest
1 голос
/ 16 ноября 2011

Я бы хотел вставить строку перед шаблоном с помощью sed: - Вставить 'XmlRootElement (name = "ABC") "перед" открытым классом "

Это скрипт:

'/public class/i\@XmlRootElement(name="ABC")'

Однако я получаю сообщение об ошибке:

sed -e script testfile.txt
sed: -e expression #1, char 13: Unterminated `s' command

Может ли кто-нибудь мне помочь?

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 ноября 2011

Для sed, к которому я привык, вы должны включить разрыв строки после вашего i\ и «завершить» вставку пустой строкой, т.е.

sed '/public class/i\
@XmlRootElement(name="ABC")

' file > outFile

Обратите внимание, пробелстрока после вашего нового вставленного текста.

Обратите внимание, убедитесь, что у вас нет пробелов в конце строки после i\.

Как я теперь понимаю, вы 'Если вы храните ваш sed в отдельном файле сценария, то к нему также применяются ограничения форматирования, просто удалите пару '', окружающую код.

И что еще более важно, ваш сценарий не работает, потому что вы используете -e дляФайл сценария sed, используйте

sed -f script testfile.txt

-e, если вы встраиваете свой сценарий sed в строку, мое первое решение выше может быть добавлено с помощью -e.

Редактировать Исправлены ссылки на a\ на `i \ '.Doah

надеюсь, это поможет.

2 голосов
/ 16 ноября 2011

Это может работать для вас:

# cat <<\! >/tmp/test.sed
> /^aaa/i\
> xxx
> /^bbb/a\
> yyy\
> zzz
> /^ccc/c\
> the end
> !
# echo -e "aaa\nbbb\nccc" | sed -f /tmp/test.sed 
xxx
aaa
bbb
yyy
zzz
the end

или из командной строки:

# echo -e "aaa\nbbb\nccc" | sed -e '/^aaa/i\xxx' -e '/^bbb/a\yyy\nzzz' -e '/ccc/c\the end'
xxx
aaa
bbb
yyy
zzz
the end

Очень полезная ссылка: здесь

...