2017-02-13 3 views
-1

Я хотел найти все слова в выходном файле команды, который соответствует некоторым буквам, например, все слова, в которых была буква d или D.Как grep все слова с определенным письмом в нем?

Так, только чтобы увидеть, где d's были, я побежал (извините, цвет вещь не будет работать здесь):

~$ ls -l | grep -i 'd' 
drwxrwxr-x 2 user user 4096 Fev 8 02:50 %% 
drwxrwxr-x 2 user user 4096 Fev 8 02:53 cd 
drwxr-xr-x 3 user user 4096 Fev 4 16:10 Desktop 
drwxr-xr-x 4 user user 4096 Fev 9 23:26 Documents 
drwxr-xr-x 3 user user 4096 Fev 4 23:48 Downloads 
-rw-r--r-- 1 user user 8980 Dez 14 01:07 examples.desktop 
-rw-rw-r-- 1 user user  5 Dez 17 01:46 hud-cli 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Music 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Pictures 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Public 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Templates 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Videos 
drwxrwxr-x 2 user user 4096 Jan 28 00:18 VirtualBox VMs 

Теперь, может кто-нибудь объяснить мне, почему ниже команда не работы, и какой я должен использовать?

~$ ls -l | grep -E -io '\b.+d.+\b' 
drwxr-xr-x 3 user user 4096 Fev 4 16:10 Desktop 
drwxr-xr-x 4 user user 4096 Fev 9 23:26 Documents 
drwxr-xr-x 3 user user 4096 Fev 4 23:48 Downloads 
rw-r--r-- 1 user user 8980 Dez 14 01:07 examples.desktop 
rw-rw-r-- 1 user user  5 Dez 17 01:46 hud-cli 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Music 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Pictures 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Public 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Templates 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Videos 

Как вы можете видеть, я использовал опцию -o, и она все еще приносит мне целую строку. Я думал, что \ b ограничит матч до тех пор, пока не появится пробел или другой специальный символ.

Когда я на самом деле положил [\ b \] (границу или пробел), он действительно испортился.

~$ ls -l | grep -E -io '[\b\ ].+d.+[\b\ ]' 
1 user user 8980 Dez 14 01:07 
1 user user  5 Dez 17 01:46 
2 user user 4096 Dez 14 07:26 
2 user user 4096 Dez 14 07:26 
2 user user 4096 Dez 14 07:26 Pub 
2 user user 4096 Dez 14 07:26 
2 user user 4096 Dez 14 07:26 
1 user user 131072 Fev 3 01:18 volume header b 

Итак, что происходит?

EDIT: Команда ls -l | grep -E -io '\b.+d.+\b' пропускает некоторые матчи, как «Рабочий стол», «Документы», «CD», и все экземпляры, которые начинаются с D, как месяц Дез (декабрь), а столбец разрешений, где они каталоги (drwx ...)

~$ ls -l 
total 204 
drwxrwxr-x 2 user user 4096 Fev 8 02:50 %% 
-rw-rw-r-- 1 user user 1043 Fev 9 23:06 allfiles.txt 
drwxrwxr-x 2 user user 4096 Fev 8 02:53 cd 
drwxr-xr-x 3 user user 4096 Fev 4 16:10 Desktop 
drwxr-xr-x 4 user user 4096 Fev 9 23:26 Documents 
drwxr-xr-x 3 user user 4096 Fev 4 23:48 Downloads 
-rw-r--r-- 1 user user 8980 Dez 14 01:07 examples.desktop 
-rw-rw-r-- 1 user user  0 Fev 9 00:22 grep 
-rw-rw-r-- 1 user user  5 Dez 17 01:46 hud-cli 
-rw-rw-r-- 1 user user  2 Jan 27 23:43 log.txt 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Music 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Pictures 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Public 
-rw-rw-r-- 1 user user  0 Fev 3 01:02 tail 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Templates 
drwxr-xr-x 2 user user 4096 Dez 14 07:26 Videos 
drwxrwxr-x 2 user user 4096 Jan 28 00:18 VirtualBox VMs 
-rw-rw-r-- 1 user user  6 Fev 10 00:51 xargs 

~$ ls -l | grep -E -io '\b[^ ]+d[^ ]+\b' 
Downloads 
examples.desktop 
hud-cli 
Videos 
+0

'\ b' (граница слов) не является символом. Вы не можете поместить его в '[' ']' (класс символов). Внутри '[' ']' это означает «backspace». – melpomene

+0

Подумайте о том, что означает '. +'. – melpomene

+0

@melpomene, не '. +' Соответствует любому символу ноль или более раз? –

ответ

0

Согласен с @melpomene, что вам нужно,

ls -l | grep -E -io '\b[^ ]+d[^ ]+\b' 

, если вы хотите ограничить матч, пока не пространство.

+0

команда не совсем работала, как я объяснил в своем EDIT выше. –

+0

Извините, я просто путаю в голове, я должен использовать '*' вместо '+' .'ls -l | grep -E -io '\ b [^] * d [^] * \ b'' дает мне результат, который я хочу. Спасибо –

+0

Рад, что он работает @Adriano_epifas. Это обычная практика в SO, чтобы принять тот, который поможет вам в качестве ответа. – xpt

Смежные вопросы