2

Используя grep, как мне сделать это в одной командной строке?

У меня есть этот grep '\$[0-9][0-9]\.[0-9][0-9]' money.txt с различными строками в текстовом файле, но у меня есть проблемы, удовлетворяющие некоторые из моих условий.

Я пытаюсь найти любые строки, которые содержат значения в долларах от $ 10,00 до $ 99,99 (знак доллара + две цифры после запятой), и моя поймает все, но даже если у вас есть текст до или после него

например, abc$15.64 , abc$15.64xyz , $15.64abc

Я хочу, чтобы они были перехвачены, только если есть пробел либо до (например, конец строки), после (начало строки), до и после (середина строки), либо вообще без пробелов (например, только строка в строке ).

Я попытался добавить \s, но тогда он вообще ничего не печатает (даже что-то допустимое, например abc $15.64 xyz), хотя они печатаются нормально, если я сделаю их необязательными (используя *). Итак, я предполагаю, что он просто полностью игнорирует \s, так как он, кажется, ничего не удовлетворяет.

Примечание: я хочу сделать пробелы необязательными, потому что мне нужно также печатать строку, когда значения в долларах находятся в начале или в конце строки, и в этом случае пробел не будет до или после них, соответственно. Даже если бы я мог заставить \s работать, если сделать его необязательным, он все равно будет соответствовать строкам вроде abc$15.64xyz

Любая идея, как я мог бы сделать эту работу?

Благодарю.

2 ответа2

1

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

egrep '(^| )\$[0-9][0-9]\.[0-9][0-9]($| )' money.txt
0

Просто для точности в вашей цели собрать всего от $ 10,00 до $ 99,99, вы бы хотели изменить идеальный ответ Спарки следующим образом:

egrep '(^ |)\$ [1-9] [0-9]. [0-9] [0-9]($ |)' money.txt

Спасибо Sparkie за подсказку egrep, я никогда не понимал, как добавить 'или' в поиск grep, очень круто и добавлено в мою сумку с набором.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .