У меня есть список значений, возвращаемых мне, и все они заканчиваются на | как ниже:
testdata1-old |
testdata |
test2-old|
Я хочу удалить все строки, содержащие -old. Какое регулярное выражение я могу использовать?
У меня есть список значений, возвращаемых мне, и все они заканчиваются на | как ниже:
testdata1-old |
testdata |
test2-old|
Я хочу удалить все строки, содержащие -old. Какое регулярное выражение я могу использовать?
Ответы:
Я думаю, что вы неправильно понимаете регулярные выражения. По сути, они отвечают на вопрос "выглядит ли этот текст как этот конкретный шаблон?" Есть много инструментов, которые используют регулярные выражения для управления текстом, например, sed или же grepи я думаю, что вы путаете их.
Что вам нужно сделать, это сформировать регулярное выражение, соответствующее тексту, который вы хотите отфильтровать. Например, искомое выражение ^.*-old\|$и отфильтруйте строки, используя что-то вроде этого.
foreach line in input_file
if regex.matches(line, "^.*-old\|$") then
continue
else
print line
line к этому в else пункт вместо печати.
Что вам нужно
grep -v -E '^. * - old \ | $' input_file & gt; выходной файл
или что должно работать так же:
egrep -v '^. * - old \ | $' input_file & gt; выходной файл
Теперь самое сложное - найти версию Windows grep или же egrep который запускается из cmd.exe или Powershell.
negative lokahead может работать, в зависимости от вашего движка регулярных выражений.