Как я могу удалить текст до и после определенного символа? - PullRequest
3 голосов
/ 12 декабря 2008

Я пытался удалить текст до и после определенного символа в каждой строке текста. Это было бы очень трудно сделать вручную, так как он содержит 5000 строк, и мне нужно удалить текст перед этим ключевым словом в каждой строке. Любое программное обеспечение, которое могло бы это сделать, было бы прекрасно или любые Perl-скрипты, которые могли бы работать в Windows. Я запускаю Perl-скрипты в ActivePerl, поэтому будут полезны скрипты, которые могут это делать и запускать на ActivePerl.

Спасибо

Ответы [ 5 ]

3 голосов
/ 12 декабря 2008

Я бы использовал это:

$text =~ s/ .*? (keyword) .* /$1/gx;
2 голосов
/ 12 декабря 2008

Предполагая, что у вас есть следующее:

text1 text2 ключевое слово text3 text4 text5 ключевое слово text6 text7

и то, что вы хотите

s/.*?keyword(.*?)keyword.*/keyword$1keyword/;

в противном случае вы можете просто заменить всю строку ключевым словом

Пример данных может помочь нам быть более ясными

2 голосов
/ 12 декабря 2008

Вам не нужно программное обеспечение, вы можете сделать эту часть вашего существующего сценария. Многострочное регулярное выражение замените по линиям / a (b) c /, после чего вы можете добавить обратную ссылку b в заменителе с $ 1. Не зная больше о тексте, с которым вы работаете, трудно угадать, каким будет реальный шаблон.

1 голос
/ 12 декабря 2008

Я бы сказал, что если $ text содержит весь ваш текст, вы можете сделать:

$text =~ s/^.*(keyword1|keyword2).*$/$1/m;

Модификатор m заставляет ^ и $ видеть начало и конец строки, а не начало и конец строки.

0 голосов
/ 12 декабря 2008

Предполагается, что вы хотите удалить весь текст слева от keyword1 и весь текст справа от keyword2:

while (<>) {
  s/.*(keyword1)/$1/;
  s/(keyword2).*/$1/;
  print;
}

Поместите это в скрипт на Perl и запустите так:

fix.pl original.txt > new.txt

Или, если вы просто хотите сделать это на месте, возможно, для нескольких файлов одновременно:

perl -i.bak -pe 's/.*(keyword1)/$1/; s/(keyword2).*/$1/;' original.txt original2.txt

Это будет выполнять редактирование на месте, переименовывая оригинал, чтобы иметь расширение .bak, использовать неявный цикл while с печатью и выполнять поиск и замену шаблона перед каждой печатью.

Чтобы быть в безопасности, сначала проверьте его без опции -i или, по крайней мере, только для одного файла ...

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