RE :Как вставить текст после определенной строки в файле?

Это решило мою проблему. Спасибо всем вам! Код, решающий проблему, был преобразован в запрос на вытягивание, поэтому все, что мне нужно было сделать в конце, это обновить о -мой -zsh.

1
18.11.2020, 11:33
2 ответа

Вот один подход perl:

$ perl -ne 'if(/\[option\]/){print "*inserted text*\n"}; print' input
Some text
Random
*inserted text*
[option]
Some stuff

А вот еще один, более лаконичный:

 $ perl -ne '/\[option\]/?print "*inserted text*\n$_":print' input
Some text
Random
*inserted text*
[option]
Some stuff

Это требует, чтобы вы прочитали весь файл в память:

$ perl -0777 -pe 's/\[option\]/*inserted text*\n$&/' input 
Some text
Random
*inserted text*
[option]
Some stuff
3
18.03.2021, 22:49

Спасибо, @terdon и @Sundeep! Это та форма, которую я искал:

perl -lpe 'print "Hello World" if /^\[option\]$/' input

Обновление:

Я хочу вставить текстовую строку только в первый раз, когда она встречает «[option]», не всегда.
Я нашел решение:

perl -lpe 'print "Hello World" if /^\[option\]$/ && ++$i == 1' input

Вместо добавления текста я могу использовать команду:

perl -lpe '$_.= "\nHello World" if /^\[option\]$/ && ++$i == 1' input

&& - это и для if, а "++" или "--" означает увеличение или уменьшение на 1. Поскольку переменная i (может быть любой другой переменной )начинается с 0 по умолчанию и приращение производится в префиксной записи, это означает, что переменная сначала увеличивается, а затем производится первое сравнение. Такой синтаксис делает команду очень эластичной и более мощной, чем я думал. «&&» имеет более высокий приоритет, чем «и». Второе условие оценивается только в том случае, если выполняется первое. Таким образом, в этом случае значение переменной увеличивается и сравнивается только в случае совпадения.

0
18.03.2021, 22:49

Теги

Похожие вопросы