Оставить только строки, содержащие x или меньше чисел. Файл TXT

Оставить только строки, содержащие x или меньше чисел. Файл TXT

Я нашел похожий вопрос:

Но в этом случае я хочу проверить не общую длину, а количество цифр в строке. Например, из этого ввода:

cdc85e24-b9e9-8802-080a-b84479e1ae82  
ekodeveloper0  
1795475824.1129747.1472396049615.ref  
1795475824.1129747.1472396049615  
967175540.1194446.1472407271491  
wangxiuyan552  
jveazey  
xoloki  
whelee  
matthauck  
patel3.anirudh  
mischa.salle  

Как удалить все строки, содержащие более N цифр?

решение1

Поскольку вы отметили свой вопрос тегом perl, один из способов сделать это в Perl — воспользоваться тем фактом, что Perl trвозвращает счетчик количества замененных символов; так, например (взяв N = 13) вы можете сделать

perl -ne 'print unless tr/[0-9]/[0-9]/ > 13' file
ekodeveloper0
wangxiuyan552
jveazey
xoloki
whelee
matthauck
patel3.anirudh
mischa.salle

Возможно, более традиционным способом было бы оценить соответствие регулярному выражению в скалярном контексте, чтобы получить количество

perl -ne '$c = () = /\d/g; print unless $c > 13' file

См. напримерСуществует ли сокращение Perl для подсчета количества совпадений в строке?

решение2

Проще оставить только строки, содержащие X илиболеечисла. Вот пример, где X — это 13:

sed -n 's/[0-9]/&/13p' input.txt > output.txt

Однако вы можете изменить это, чтобы сделать наоборот. Вот команда, которая сохранит только строки, имеющиеменее 13числа:

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

Пояснение - печатать только строки с 13+ числами

sed -n 's/[0-9]/&/13p' input.txt > output.txt

Символ &в заменяющем тексте означает «все, что было сопоставлено».

Числовой флаг в sкоманде (после /find/replace/части) означает замену только этого экземпляра шаблона поиска.

Флаг pв sкоманде означает «вывести, если была сделана замена».

Переключение -n, конечно же, отключает действие Sed по умолчанию «печать».

Пояснение - печатать только строки с <13 числами

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

Переключатель -e— «execute»; он просто передает команду. Он нам здесь нужен, поскольку мы передаем больше одной.

Команда tпропускает оставшиеся команды, если последняя sкоманда выполнила замену.

Команда pпечатает.

Связанный контент