Linux sed вставить строку

Как вставить строку после совпадения с помощью sed? — Подсказка по Linux

Одна из полезных и мощных команд Linux — это команда «sed». Эта команда используется для выполнения различных типов задач в Linux, таких как вставка, обновление и удаление определенного текста или строки на основе совпадения. Вы можете вставить текст в строку или файл по-разному, используя команду «sed».

В этом руководстве показано, как вставить строку после нахождения совпадения в строке или строке.

Вставить строку в строку

Новая строка может быть вставлена ​​после любого строкового значения с помощью команды «sed», если шаблон, определенный в команде, совпадает с любой частью строкового значения.

В следующем примере показано, как новая строка может быть добавлена ​​после строкового значения, если конкретная строка существует где-либо в строковом значении.

Пример-1: вставить строку в строку после нахождения совпадения

Следующая команда выполнит поиск «inng» в строке «Мне нравится программирование» и в строке текста «Нравится ли вам программирование?» будет вставлен после строки, если строка поиска существует.

Здесь символ «&» используется для вставки строки после строки.

$ эхо «Мне нравится программировать». | sed ‘s / inng / & Нравится ли вам программировать? /’

Следующий вывод показывает, что «inng» не существует в строке и после строки не вставляется никакая строка.

Следующая команда выполнит поиск «ing.» в строке «Я люблю программировать», и он присутствует в строке.

$ эхо «Мне нравится программировать». | sed ‘s / ing ./& Любишь программировать? /’

Следующий вывод показывает, что новая строка добавляется после строки.

Вставить строку в файл

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

Читайте также:  Показать все процессы linux

А. Использование «a» в команде «sed»

Буква «a» может использоваться в шаблоне поиска «sed» для добавления одной или нескольких строк в файле после строки, в которой совпадает шаблон поиска, или после определенного номера строки.

Б. Использование «i» в команде «sed»

Буква «i» может использоваться в шаблоне поиска команды «sed» для вставки одной или нескольких строк в файл перед строкой, в которой совпадает шаблон поиска.

Вставить строку (строки) в файл на основе шаблона:

Создайте текстовый файл с разделителями табуляции с именем products.txt со следующим содержимым, чтобы показать использование вышеуказанного флага в команде «sed».

products.txt

ID Имя
01 Взбитые сливки
02 Какао-порошок
03 Сахар
04 Яйцо
05 Мука

Пример 2. Вставьте строку после определенного номера строки, используя букву «а».

Следующие команды показывают, как можно добавить новую строку после определенного номера строки файла products.txt на основе шаблона, используемого в команде «sed».

Здесь первая команда покажет существующее содержимое файла. Команда «sed» добавит текст «b01 Разрыхлитель» после первых двух строк файла. Последняя команда используется для проверки того, изменено ли содержимое файла или нет.

$ Кот products.txt
$ sed ‘2 a b01 \ t Разрыхлитель’ products.txt
$ Кот products.txt

Следующий вывод появится после выполнения указанной выше команды.

Пример 3. Вставьте строку после последней строки с помощью символа «а».

Следующая команда показывает, как добавить новую строку после последней строки файла. Первая и последняя команды показывают существующее содержимое файла до и после выполнения команды «sed». Символ «$» используется в шаблоне команды «sed» для упоминания последней строки файла.

$ Кот products.txt
$ sed ‘$ a b01 \ t Разрыхлитель’ products.txt
$ Кот products.txt

Следующий вывод появится после выполнения указанной выше команды.

Пример 4. Вставьте строку в любом месте файла после сопоставления с шаблоном с помощью символа «а»

Следующая команда «sed» показывает, как новую строку можно добавить в любом месте файла на основе соответствующего шаблона. Шаблон, используемый в команде «sed», будет искать любую строку, начинающуюся с «s01», и добавлять после нее новую строку. Четвертая строка файла начинается с «s01», и новая строка будет вставлена ​​после этой строки.

$ Кот products.txt
$ sed ‘/^s01.*/a b01 \ t Разрыхлитель’ products.txt
$ Кот products.txt

После выполнения команды появится следующий вывод.

Следующая команда «sed» будет искать любую строку, которая заканчивается на «Powder», и вставлять после нее новую строку. Третья строка файла заканчивается на «Порошок». Итак, новая строка будет вставлена ​​после этой строки.

Читайте также:  Аналоги radmin для linux

$ Кот products.txt
$ sed ‘/ Порошок $ / a b01 \ t Разрыхлитель’ products.txt
$ Кот products.txt

Следующий вывод появится после выполнения вышеуказанных команд.

Пример 5. Вставьте несколько строк после соответствующего шаблона, используя букву «а»

Следующая команда «sed» показывает способ добавления нескольких строк в содержимое файла на основе соответствующего шаблона.

Здесь две строки будут добавлены после третьей строки в соответствии с шаблоном.

$ Кот products.txt
$ sed ‘/ ^ [a-c] / a b01 \ tПорошок для выпечки \ nb02 \ tПищевая сода’ products.txt
$ Кот products.txt

Следующий вывод появится после выполнения вышеуказанных команд.

Пример 6. Вставьте строку после сопоставления с шаблоном, используя букву «I»

$ Кот products.txt
$ sed ‘/ cream / i b01 \ t Разрыхлитель’ products.txt
$ Кот products.txt

Следующий вывод появится после выполнения вышеуказанных команд.

Пример 7. Постоянно вставлять строку после совпадающего шаблона с помощью параметра «-i»

Следующая команда «sed» показывает, как навсегда изменить содержимое файла. Параметр «i» используется с командой «sed» для вставки новой строки в файл на основе шаблона.

$ Кот products.txt
$ sed -я ‘/ e $ / a g01 \ tGhee’ products.txt
$ Кот products.txt

Следующий вывод появится после выполнения вышеуказанных команд.

Вывод:

Здесь показаны способы вставки двух или более строк в файл с помощью команды «sed» с шаблоном. учебник, чтобы помочь читателю применить эту команду для вставки строк в временно или постоянно на основе шаблон.

Источник

Append text to file using sed

How can I write text to a file using sed? More specifically I would it add null variables to my blank text file that was created using touch. The syntax of sed is very confusing to me.

Please show us what you’ve tried, along with your results, and an example of the output you’re expecting.

4 Answers 4

sed -i "$ a some text" somefile.txt 

It’s useful to know how to actually do this with sed. Sometimes you want to use sed to make multiple changes to a file, including adding a line to the end, and it’s nice to be able to do that in a single command.

specially useful since it can be used with sudo , while sudo echo > file would be doing a sudo echo and then redirecting the output as non-sudo to file

This is a syntax error on MacOS and other *BSD platforms. The a command is not properly standardized by POSIX so whether or not it works on an empty file is probably platform-dependent. The syntactically correct sed -i » ‘a$\ (newline) some text’ somefile.txt does not actually modify an empty file on MacOS Big Sur, like @doak already remarked (presumably regarding Linux).

Читайте также:  Linux поиск по части имени

This adds the text on a new line, what if I want to append it inline? Do I really have to use s/$/. / ?

If you’re just appending text to the end of the file then you wouldn’t use sed in the first place.

echo "some text" >> somefile.txt 

I’ve been using an example to change variables in a file, I thought maybe you could add them too. This is MUCH simpler.

Adding a late post because while the accepted answer is the simplest solution to this problem, the question actually highlights a couple of common situations:

In short, you can’t touch , then edit a file with sed . Sed doesn’t work on empty files, but occasionally you need to do the equivalent of

sudo echo "some text" >> somefile.txt 

sudo doesn’t like the redirect, but there are workarounds:

echo "some text" | sudo tee --append somefile.txt 

or if pipes are not an option either, or you simply must use sed, or you just like complexity:

dd if=/dev/zero count=1 bs=1 of=somefile.txt sed -i '$ a some text' somefile.txt sed -i '1 d' somefile 

On some systems,. you might have to use sed -i -e ‘$ a .

This sounds like an XY Problem to me. You might get better or more useful answers if you ask about what problem you’re trying to solve, rather than asking for help implementing a particular solution.

But if you absolutely must do this in sed, you can use sed’s r command to read a file. For example:

[ghoti@pc ~/tmp]$ cat one RED BLUE [ghoti@pc ~/tmp]$ cat two green yellow [ghoti@pc ~/tmp]$ echo ">> start"; sed '$r two' one; echo ">> end" >> start RED BLUE green yellow >> end [ghoti@pc ~/tmp]$ 

The sed command $r two causes sed to slurp in the file named «two» after processing the last line of input (which in this case is from the file «one»).

Note that this merges one file into the stream of another file, but sed’s «standard output» ( stdout ) is what contains the full/combined stream. You can redirect that output to a file per Ignacio’s answer if that’s what you want.

Источник

Оцените статью
Adblock
detector