Вы действительно написали '???hex'? если так, то именно поэтому это не сработало.
Однако наиболее логичным ответом будет то, что вы имеете в виду множество вариантов сопоставления, существующих в picocom. Ваша линия и так в порядке. Я думаю, что ваша версия picocom слишком старая, чтобы иметь доступ к этим функциям.
Например, у меня есть версия 1.7 на raspberry pi, и она также не работает с этими параметрами, однако использование версии 3.1, которая является последней на данный момент, работает нормально.
Используйте awk, это вернет все записи, где 5-е поле, которое является выигрышным, больше 50 или не является числом.
awk '$5 > 50' f1.txt
Вот это
Rank Country Driver Races Wins
1 [United_Kingdom] Lewis_Hamilton 264 94
2 [Germany] Sebastian_Vettel 254 53
6 [Germany] Michael_Schumacher 307 91
13 [France] Alain_Prost 199 51
68 [Italy] Alberto_Ascari 36 132
Поскольку в данном случае это последнее поле в строке, вы также можете использовать
awk '$NF > 50' f1.txt
Если вы действительно хотите использовать grep, вы можете использовать что-то вроде этого из ответа, сделанного Грегом Фентоном, но вам нужно изменить -E
на -P
, чтобы использовать регулярное выражение Perl, добавить \b
, чтобы указать, что цифра следует за границей слова, поэтому перед ней нет цифр или букв, и измените первый \d
в трехзначной части на [1-9]
, чтобы не было трехзначных чисел с ведущим 0
grep -P '\b([5-9][1-9]|60|[1-9]\d\d)$' f1.txt
Это означает, что есть только двух- или трехзначные выигрыши.
\b означает границу слова, это означает, что перед первой цифрой не должно быть ни цифр, ни букв
()означает, что после границы слова вам нужно указать то, что определено внутри скобок.
[5 -9][1 -9] означает, что должно быть две цифры, где первая цифра 5 -9, а вторая 1 -9, что означает, что он поймает номера 51 -99 за исключением 60.
| означает или оператор, и поскольку 60 исключено в предыдущем регулярном выражении [5-9][1-9]
, мы говорим или 60.
|[1 -9]\d\d означает или три цифры, где первая цифра 1 -9, за которой следуют любые две цифры, [1-9]\d\d
также может быть [1-9][0-9][0-9
]
$ означает конец строки, после последней цифры должен быть конец строки, чтобы вы не ловили числа, которые не находятся в последнем поле, за которыми не следует конец строки.
Таким образом, в основном grep говорит искать границу слова, за которой следует двух- или трехзначное число больше 50, за которым следует конец строки.
Эта часть [5-9][1-9]|60
находит двузначные числа 51 -99, а эта часть [1-9]\d\d
находит трехзначные числа, где первая цифра равна 1 -9, если вы хотите использовать более трех цифр, добавьте еще одну или работа с |
как
grep -P '\b([5-9][1-9]|60|[1-9]\d\d|[1-9]\d\d\d)$' f1.txt
Вышеприведенное относится к четырем цифрам.
Если вы хотите использовать любое количество цифр, используйте что-то вроде этого
grep -P '\b([5-9][1-9]|60|[1-9]\d\d)\d*$' f1.txt
Если по какой-то причине регулярное выражение Perl не работает в вашем grep, вы можете попробовать расширенное регулярное выражение
grep -E '\b([5-9][1-9]|60|[1-9][0-9][0-9])[0-9]*$' f1.txt
для grep
(, если вам это действительно нужно awk
), то есть:
grep -E '[[:blank:]]0*(5[1-9]|[6-9][0-9]|[1-9][0-9][0-9])[0-9]*$' infile
Придерживаясь необходимости использовать grep
, как насчет:
grep -E '([5-9]\d|\d\d\d)$' f1.txt
, что дает:
$ grep -E '([5-9]\d|\d\d\d)$' f1.txt
1 [United_Kingdom] Lewis_Hamilton 264 94
2 [Germany] Sebastian_Vettel 254 53
6 [Germany] Michael_Schumacher 307 91
13 [France] Alain_Prost 199 51
68 [Italy] Alberto_Ascari 36 132