Рейтинг:0

команда grep с использованием подстановочных знаков [0-9]

флаг in
grep ".0000000" данные > вывод

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

grep ".[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" данные > вывод

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

флаг hr
`.` в регулярном выражении grep соответствует любому одиночному символу - если вы хотите сопоставить буквальную точку (точку), вам нужно `\.` или `[.]`
флаг ar
@steeldriver ваш комментарий выглядит как ответ! :)
флаг hr
@user68186 user68186 может быть... не знаю. Описание «это не работает так, как должно быть» довольно расплывчато ... вероятно, ему, по крайней мере, нужна какая-то граница или привязка, если ОП хочет * ровно * 7 цифр.
deepblue avatar
флаг in
@steeldriver, если ты ответишь на этот вопрос, я приму его. Ваше решение работает.
Рейтинг:3
флаг hr

Из вашего описания неясно, не соответствует ли ваше выражение вещам, которые вы хотите, или соответствует вещам, которые вам не нужны.

Если второе, то может из-за этого . в регулярном выражении grep соответствует любому одиночному символу (кроме символа новой строки, однако grep в любом случае обычно основан на строке). Чтобы соответствовать буквальной точке (точке), вам нужно избежать ее \. или поместите его в набор символов, как вы сделали для диапазонов десятичных цифр:

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"

Вы также упоминаете, что выражение должно соответствовать данным, «заканчивающимся на» - неясно, имеете ли вы в виду окончание строки или граница слова - это соответственно $ и (или же \>) бывший.

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\b"

Вы также можете сократить выражение, используя квантификатор — переключение в режим расширенного регулярного выражения (ERE).1:

grep -E "[.][0-9]{7}$"

1 В GNU grep квантификаторы можно использовать в режиме базового регулярного выражения (BRE), экранируя фигурные скобки. grep "[.][0-9]\{7\}$"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.