2017-02-13 7 views
-1

명령 출력에서 ​​일부 단어와 일치하는 모든 단어를 찾으려고합니다. 예를 들어 문자에 d 또는 D가있는 모든 단어를 찾으려고했습니다.그 안에 특정 문자가있는 모든 단어를 grep하는 방법은 무엇입니까?

그래서, 단지 (죄송합니다, 색상 것은 여기에 작동하지 않습니다) 도르 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 (12 월) 및 사용 권한 열과 같이 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' (단어 경계)는 문자가 아닙니다. '['']'(문자 클래스)에 넣을 수 없습니다. '['']'안에는 "백 스페이스"를 의미합니다. – melpomene

+0

'. +'가 무엇을 의미하는지 생각해보십시오. – melpomene

+0

@ 멜루 민,'. +'문자가 0 번 이상 일치하지 않습니까? –

답변

0

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

이 필요, @melpomene에 동의합니다.

+0

위의 편집에서 설명한대로 명령이 제대로 작동하지 않았습니다. –

+0

죄송합니다. 방금 혼란 스러웠습니다.'+'대신'*'를 사용해야합니다 .'ls -l | grep -E -io '\ b [^] * d [^] * \ b''는 내가 원하는 결과를 준다. 고마워요 –

+0

다행히 @Adriano_epifas. 그것은 당신을 대답하는 데 도움이되는 것을 받아들이는 것이 일반적입니다. – xpt