Як знайти пробіл у тексті. використовуючи grep?


13

Як промальовувати один пробіл у тексті?

cat a.txt| grep ' '

або

cat a.txt| grep '\s '

7
Безкоштовне використання catв обох випадках. Перший можна було записати grep ' ' a.txt, другий змінити аналогічно.
MadHatter

1
Зауважте, що \sтакож відповідає вкладка, повернення, вертикальна вкладка, подача форми та, технічно, новий рядок. Якщо ви хочете відповідати лише пробілу та вкладці, використовуйте [[:blank:]]або [ \t].
Призупинено до подальшого повідомлення.

за допомогою gnu grep, ви можете обмежити кількість матчів ( -mопція) одним ...
sendmoreinfo

Це більш простий egrep "\ s" a.txt

Відповіді:


6

Якщо ви хочете поцікавитися лише одним пробілом, коли ви ставите у своєму запитанні, ви використовуєте щось на зразок:

grep -e '^\s[^\s]' -e '[^\s]\s$' -e '[^\s]\s[^\s]' a.txt

або для варіантів POSIX:

grep -e '^ [^ ]' -e '[^ ] $' -e '[^ ] [^ ]' a.txt

або менш читаний варіант POSIX:

grep '\(^\|[^ ]\)\ \([^ ]\|$)' a.txt

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

Крім того, варто відзначити, що не всі версії програмного забезпечення підтримують регулярні вирази.


1
Ви можете опустити всі косої риски з останнього прикладу та покращити читабельність, скориставшись -Eопцією POSIX, яка дозволяє розширювати регулярні вирази. grep -E '(^|[^ ]) ([^ ]|$)' a.txtУ будь-якому випадку, зворотний проріз перед пробілом не потрібен, і перед остаточним дужкою, що закривається, його немає. Крім того, для версій, grepякі розуміють \s, ви можете скоротити вираз для непробілу [^\s]до\S
Призупинено до подальшого повідомлення.

Однак це теж працює, [[: blank:]]
Emax


1

Варіант 2 знайде лише два пробіли. Якщо ви використовуєте '\s'замість цього, обидва варіанти працюватимуть.

Ви можете легко перевірити це самостійно, тож яке ваше власне питання?


1
Чому знаходять лише два пробіли? Я думаю, що це відповідає будь-якому простору.
cuonglm

1
@Gnouc: Варіант 2, коли він ображає його '\s ', відповідатиме принаймні двом пробілам поспіль, оскільки він додав пробіл після групи символів \s.
Свен

Ви маєте рацію, я не бачу місця після цього \s, моя помилка.
cuonglm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.