Вставка нескольких строк в файл после указанного шаблона с помощью сценария оболочки



Я хочу, чтобы вставить несколько строк в файл с помощью shell-скрипт.
Давайте рассмотрим содержимое моего входного файла:
вход.txt:



abcd
accd
cdef
line
web


теперь я должен вставить четыре строки после строки 'cdef' в вход.txt.
После вставки мой файл должен измениться следующим образом:



abcd
accd
cdef
line1
line2
line3
line4
line
web


выше вставки я должен сделать с помощью shell-скрипт. Кто-нибудь может мне помочь?

649   5  

5 ответов:

другое sed,

sed '/cdef/r add.txt' input.txt

вход.txt:

abcd
accd
cdef
line
web

добавить.txt:

line1
line2
line3
line4

. Затем используйте -i С sed.

sed -i '/cdef/r add.txt' input.txt

если вы хотите использовать регулярное выражение в качестве выражения, вы должны использовать -E тег sed.

sed -E '/RegexPattern/r add.txt' input.txt

С помощью GNU sed:

sed "/cdef/aline1\nline2\nline3\nline4" input.txt

если вы начали с:

abcd
accd
cdef
line
web

это позволит произвести:

abcd
accd
cdef
line1
line2
line3
line4
line
web

если вы хотите сохранить изменения в файле на месте, говорят:

sed -i "/cdef/aline1\nline2\nline3\nline4" input.txt

используя awk:

awk '/cdef/{print  RS "line1" RS "line2" RS "line3" RS "line4";next}1' input.txt 

объяснение:

  • вы находите строку, которую хотите вставить с помощью /.../
  • печать текущую строку с помощью print
  • RS построен в awk переменная, которая по умолчанию установлена в new-line.
  • вы добавляете новые строки, разделенные этой переменной
  • 1 в конце концов приводит к печати всех других строк. Используя next перед это позволяет нам предотвратить текущую строку, так как вы уже напечатали ее с помощью print .

$ awk '/cdef/{print  RS "line1" RS "line2" RS "line3" RS "line4";next}1' input.txt
abcd
accd
cdef
line1
line2
line3
line4
line
web

чтобы внести изменения в файл, вы можете сделать:

awk '...' input.txt > tmp && mv tmp input.txt
sed '/^cdef$/r'<(
    echo "line1"
    echo "line2"
    echo "line3"
    echo "line4"
) -i -- input.txt

этот ответ легко понять

  • копировать перед шаблоном
  • добавить строки
  • копировать шаблон
  • заменить оригинальный файл

    FILENAME= ' app / Providers / AuthServiceProvider.php'

Шаг 1 копирование до шаблона

sed '/THEPATTERNYOUARELOOKINGFOR/Q' $FILENAME >>${FILENAME}_temp

Шаг 2 добавьте свои строки

cat << 'EOL' >> ${FILENAME}_temp

HERE YOU COPY AND
PASTE MULTIPLE
LINES, ALSO YOU CAN
//WRITE COMMENTS

AND NEW LINES
AND SPECIAL CHARS LIKE $THISONE

EOL

Шаг 3 добавьте остальную часть файла

grep -A 9999 'THEPATTERNYOUARELOOKINGFOR' $FILENAME >>${FILENAME}_temp

заменить оригинальный файл

mv ${FILENAME}_temp $FILENAME

если вам нужны переменные, в шаге 2 Замените 'EOL' на EOL

cat << EOL >> ${FILENAME}_temp

this variable will expand: $variable1

EOL

Comments

    Ничего не найдено.