Вставка нескольких строк текста перед конкретной строкой с помощью sed
Я пытаюсь вставить несколько строк текста перед определенной строкой, но продолжаю получать ошибки sed, когда я пытаюсь добавить новый символ строки. Моя команда выглядит так:
sed -r -i '/Line to insert after/ i Line one to insert
second new line to insert
third new line to insert' /etc/directory/somefile.txt
сообщается об ошибке:
sed: -e expression #1, char 77: unterminated `s' command
Я пробовал, используя n
, (как в Примере), никакого символа вообще, просто перемещение второй строки в следующую строку. Я также пробовал что-то вроде:
sed -r -i -e '/Line to insert after/ i Line one to insert'
-e 'second new line to insert'
-e 'third new line to insert' /etc/directory/somefile.txt
редактировать!: Извините, я хотел, чтобы текст был вставлен перед существуя, а не после!
6 ответов
Это должно работать:
sed -i '/Line to insert after/ i Line one to insert \
second new line to insert \
third new line to insert' file
для чего-либо, кроме простых замен на отдельных линиях, используйте awk вместо sed для простоты, ясности, надежности и т. д., п.
вставить перед строку:
awk '
/Line to insert before/ {
print "Line one to insert"
print "second new line to insert"
print "third new line to insert"
}
{ print }
' /etc/directory/somefile.txt
вставить после строки:
awk '
{ print }
/Line to insert after/ {
print "Line one to insert"
print "second new line to insert"
print "third new line to insert"
}
' /etc/directory/somefile.txt
sed -i '/Line to insert after/ i\
Line one to insert\
second new line to insert\
third new line to insert' /etc/directory/somefile.txt
Это может сработать для вас (GNU sed & Bash):
sed -i $'/Line to insert after/a\line1\nline2\nline3' file
этот ll работает с первой строки.. Например: если вы хотите вставить из 3-й строки файла, замените "1i "на"3i".
sed -i '1i line1'\n'line2'\n'line3' 1.txt
cat 1.txt
line1
line2
line3
Hai
чтобы быть совместимым с POSIX и работать в OS X, я использовал следующее (одиночная строка с кавычками и пустая строка для демонстрационных целей):
sed -i "" "/[pattern]/i\
line 1\
line 2\
\'line 3 with single quotes\`
\
" <filename>