1

Какое регулярное выражение я должен использовать, чтобы удалить экспоненциальные числовые термины и числа с плавающей запятой из текстового файла?

Например, у меня есть следующие термины в моем файле:

-0.161678
relational
0.081827
5.936420e-01
-0.155506
Favori54
0.086938
1.187284e+00
-0.149283
0.091921
"External"
1.780926e+00
-0.143025

Я хотел бы, чтобы мой файл содержал только следующие строки:

relational
Favori54
"External"

3 ответа3

0

Мне кажется, что вам нужны строки, начинающиеся с чего угодно, кроме цифры или знака минус. Это поможет вам:

grep '^[^0-9,-]' file.txt
0
awk '/^[+-]?[0-9]+\.?[0-9]*([Ee][+-]?[0-9]+)?$/ { next }
     /^[+-]?\.[0-9]+([Ee][+-]?[0-9]+)?$/ { next }
     { print }' yourfile

Мантисса часть числа, может начинаться с точки или заканчиваться точкой, но не может быть просто . не действителен, и добавление показателя степени, как .E3 не делает это действительным. 0. и .0 действительны, с показателем степени или без него. Показатель степени может быть верхним или нижним регистром e и может иметь явный знак + .

Обратите внимание, что это предполагает отсутствие пробелов вокруг значений с плавающей точкой. Это также соответствует целочисленным значениям. Кроме того, он проходит через элементы, которые отличаются от нотации с плавающей точкой ненужными символами или чем-либо еще, например 1E+ , 1.0A или .0E+33x . Обратите внимание, что некоторые из этих примеров имеют нотацию с плавающей точкой в качестве действительного префикса .

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

Наконец, { print } может быть "обработан кодом" до 1 . Выражение 1 имеет логическое значение true, а действие awk по умолчанию для условия true или соответствующего шаблона - { print } .

-1

Попробуй это:

awk '{if($ 1+0!= $ 1) печатать $ 0} 'filename.txt

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