Perl + как добавить строки перед словом в файле - PullRequest
0 голосов
/ 18 декабря 2018

Я пишу следующий код в своем скрипте bash (работает на версии redhat 7.2)

, чтобы добавить содержимое переменной $ info перед словом - ОШИБКА: в файле

export info="The Postfix error(8) delivery agent processes delivery requests from the queue manager. Each request specifies a queue file, a sender address, the reason for non-delivery (specified as the next-hop destination), and recipient"
perl -i -plne 'print "$ENV{info}" if(/ERROR:/);' file

после запуска кода вывод файла, который мы видим, слишком длинный, и лучше разделить строку на 3 строки

more file

The Postfix error(8) delivery agent processes delivery requests from the queue manager. Each request specifies a queue file, a sender address, the reason for non-delivery (specified as the next-hop destination), and recipient
ERROR:

Поэтому я добавляю «\ n»в информационной строке, как показано ниже: и мы снова запускаем код

export info="The Postfix error(8) delivery agent processes delivery requests from the queue manager. \nEach request specifies a queue file, a sender address, \nthe reason for non-delivery (specified as the next-hop destination), and recipient"
perl -i -plne 'print "$ENV{info}" if(/ERROR:/);' file

, но файл все еще не содержит новые строки (на самом деле "\ n" в строке)

The Postfix error(8) delivery agent processes delivery requests from the queue manager. \nEach request specifies a queue file, a sender address, \nthe reason for non-delivery (specified as the next-hop destination), and recipient
ERROR:

в то время как ожидаемые результаты должны быть:

The Postfix error(8) delivery agent processes delivery requests from the queue manager. 
Each request specifies a queue file, a sender address, 
the reason for non-delivery (specified as the next-hop destination), and recipient
ERROR:

Где я здесь не прав?

1 Ответ

0 голосов
/ 18 декабря 2018

Проблема здесь в том, что в Bash двойные кавычки не приводят к интерпретации \n как символа новой строки.

Для этого, я думаю, я бы просто включил буквенные символы новой строки в строку:

export info="The Postfix error(8) delivery agent processes delivery requests from the 
queue manager.
Each request specifies a queue file, a sender address,
the reason for non-delivery (specified as the next-hop destination), and recipient"
perl -i -plne 'print "$ENV{info}" if(/ERROR:/);' file

В противном случае вы можете использовать printf, но это кажется излишним:

export info=$(printf "The Postfix error(8) delivery agent processes delivery requests from the queue manager. \nEach request specifies a queue file, a sender address, \nthe reason for non-delivery (specified as the next-hop destination), and recipient")
perl -i -plne 'print "$ENV{info}" if(/ERROR:/);' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...