Удалить строки с менее чем 4 символами и более трех чисел в bash

3

Так, например, у меня есть этот текстовый файл:

use
user_99
12345

+ 10k строк ...

И я хочу удалить из командной строки те, у которых меньше 4 символов, Я уже искал в google, но результатов не было.

Любые идеи? :)

Я также хотел бы удалить строки с более чем тремя номерами в начале.

    
задан user257284 12.03.2014 в 01:04
источник

2 ответа

2

sed или awk - хороший выбор:

sed -rn '/^.{0,3}$/n; /^[0-9]{3,}/n; p' file

awk --re-interval 'length > 3 && !/^[0-9]{3,}/' file
    
ответ дан glenn jackman 12.03.2014 в 02:12
источник
3

Вы можете создать регулярное выражение GNU sed как минимум на 4 символа в виде .{4,} - затем удалить все строки except , содержащие не менее 4 символов:

sed -r '/.{4,}/!d' file

Аналогично, строка, начинающаяся с более чем трех последовательных цифр, будет ^[0-9]{4,} , поэтому для удаления всех этих

sed -r '/^[0-9]{4,}/d' file

Вы можете комбинировать их либо с помощью -e или ;

sed -r -e '/.{4,}/!d' -e '/^[0-9]{4,}/d' file

или

sed -r '/.{4,}/!d ; /^[0-9]{4,}/d' file

Обратите внимание, что . соответствует символам пробела, а также не пробелам - если это не то, что вы хотите, вы можете изменить его, заменив . на диапазон символов или класс POSIX, например [[:alnum:]] .     

ответ дан steeldriver 12.03.2014 в 02:12