Как удалить все новые строки из файла в Perl-скрипте? - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть файл, который при просмотре с vi с :set list выглядит следующим образом:

one^M$
two$
three$^M
four$

Я хочу удалить все новые строки ($) в файле изнутрискрипт на PerlТаким образом, файл должен выглядеть следующим образом:

one^Mtwothree^Mfour

После этого я хочу заменить CR (^M) на новые строки (\n), но это уже другая история ...

Я попробовал следующий код:

#!/usr/bin/perl
use strict;
use warnings;
my $file = "test.txt";
system("sed -i ':a;N;$!ba;s/\n//g' $file");
exit 0;

Я знаю, что использовать system некрасиво, но я наказан этой ошибкой:

sed: -e expression #1, char 10: unterminated `s' command

Кто-нибудь знает элегантный способ достижениямоя цель?

1 Ответ

0 голосов
/ 25 ноября 2018

Если вы уже используете Perl, нет необходимости использовать sed.В Perl есть переключатель -i, который упрощает подобные вещи.

perl -pi -e's/\n//' test.txt

В качестве альтернативы Path :: Tiny обеспечивает функциональный эквивалент -i.

use strict;
use warnings;
use Path::Tiny;
my $file = shift; # get filename from argument
path($file)->edit_lines(sub { s/\n// });

В обоих случаях замена будет выполняться для каждой строки, что должно быть хорошо, потому что строка содержит завершающий символ новой строки.Вы можете выполнить его сразу для всего файла, передав -0777 в oneliner или используя ->edit вместо ->edit_lines, тогда вы захотите использовать s/\n//g для замены нескольких вхождений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...