У меня есть файл со следующим видом текста:

@ heading with some text
the.actual.text.of.choice
which.can.be.several.lines
in.length.with.no.pattern
+
more.text.that.i.want.to
remove.several.lines.long

Я пытался со следующим:

perl -pe '^@ .* $+' input_file.txt > output_file.txt

который я читал как: «@ в начале строки, за которым следует любое количество символов и заканчивая + в конце строки». Но я получил следующую ошибку:

syntax error at -e line 1, near "^"
Execution of -e aborted due to compilation errors.

Так как я совсем новичок в regex, не могли бы вы сказать мне, где я не прав? И есть ли способ сделать это напрямую с помощью grep? Может быть, с опциями -f или -E?

1 ответ1

0

do{local $/; <STDIN>} читает все входные данные в одну строку.

=~ /^@[^+]+\+/gm сопоставляет строку с регулярным выражением (строка, начинающаяся с @ , за которой следует любой символ, кроме + , заканчивающийся +).

print $& распечатать весь матч.

cat input_file.txt | perl -e 'do{local $/; <STDIN>} =~ /^@[^+]+\+/gm; print $&' > output_file.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .