#regex #grep #posix
#регулярное выражение #grep #posix
Вопрос:
мне нужно регулярное выражение для grep (posix) только для печати (возвращает true), если каждая плавающая точка, разделенная пробелом в одной строке, допустима, как:
3.14 12 18.9
и ничего не печатать (возвращает false)
если в этой строке между пробелами появляется одна или несколько недопустимых плавающих точек, например:
8.12 1.1.1 78
или
1..28 1.09 46
плавающая точка может отображаться как можно больше в этой единственной строке, пока допустима плавающая точка, разделенная пробелом, она вернет true / print с помощью grep (posix).
в настоящее время у меня есть регулярное выражение для grep:
grep -E "^[[:blank:][:digit:]]*. [[:digit:]] $" FILE
это работает для шаблона, подобного:
1.13 1 1.2.3 1. 1
но я не привык использовать шаблоны 1.2.3 и 1. 1 для соответствия, просто мне нужно 1,13 или 1 между пробелами.
примечание: мне просто нужна эта работа только в одной строке.
Ответ №1:
Вы можете использовать
grep -E '^[0-9] (.[0-9] )?([[:blank:]][0-9] (.[0-9] )?)*
Подробные сведения:
^
- начало строки
[0-9]
- одна или несколько цифр
(.[0-9] )?
- необязательное вхождение a .
и одной или нескольких цифр
([[:blank:]][0-9] (.[0-9] )?)*
- ноль или более случаев
[[:blank:]]
- табуляция или пробел
[0-9] (.[0-9] )?
- одна или несколько цифр, за которыми следует необязательное вхождение a .
и одна или несколько цифр
$
- конец строки.
Подробные сведения:
^
— начало строки[0-9]
— одна или несколько цифр(.[0-9] )?
— необязательное вхождение a.
и одной или нескольких цифр([[:blank:]][0-9] (.[0-9] )?)*
— ноль или более случаев[[:blank:]]
— табуляция или пробел[0-9] (.[0-9] )?
— одна или несколько цифр, за которыми следует необязательное вхождение a.
и одна или несколько цифр
$
— конец строки.