У меня есть набор файлов .csv, которые я пытаюсь очистить. Каждый из них имеет такие данные:Bash работает в командной строке, но не в perl-скрипте
x0,"","",""
x1,123,456,789
x2,123,456,789
x3,123,456,789
-,"","",""
x4,123,456,789
[space],____,____,____
x5,123,456,789
x6,===,====,======
x7,---,--------=--,-------
Я хочу, чтобы удалить все строки, которые не хп, ###, ###, ###, поэтому в данном примере, было бы строки 1, 5, 7 , 9 и 10. В командной строке cygwin я печатаю следующие команды 1 по 1:
sed -i '/"",""/d' *.csv
sed -i '/___/d' *.csv
sed -i '/---/d' *.csv
sed -i '/===/d' *.csv
и все эти работы. Однако, когда я пытаюсь поставить их вместе в Perl-скрипт (остальная часть моего кода в Perl, они не:
system("sed -i '/"",""/d' *.csv");
system("sed -i '/___/d' *.csv");
system("sed -i '/---/d' *.csv");
system("sed -i '/===/d' *.csv");
и я получаю результат:
строку, найденную где оператор ожидается на test1.pl линии 1, возле "" СЭД -i «/ "", ""
(Missing оператор раньше ""?)
Строка найден где оператор ожидается на test1.pl линии 1, рядом "", ""/d '* .csv ""
(Отсутствует оператор перед "/ г» * .csv"?) Ошибки
синтаксиса в test1.pl строке 1, рядом с "" СЭД -i"/"", ""
I заметьте все работы за исключением того, что первая команда - есть ли что-то особенное о ""
в sed? Любая помощь будет оценена! Более простое решение приветствуется!
Вы не можете использовать двойные кавычки внутри двойных кавычек таким образом (первая команда). –
Почему вы вызываете sed из perl? Было бы гораздо лучше реализовать эти замены, используя собственные функции perl. –