나는 다음 코드를 사용하고 있습니다
$ rpm -qa | grep -i gcc
libgcc-4.8.3-7.fc20.i686
gcc-c++-4.8.3-7.fc20.x86_64
gcc-4.8.3-7.fc20.x86_64
libgcc-4.8.3-7.fc20.x86_64
$ rpm -qa | grep -i *gcc*
$
두 번째 방법이 첫 번째 방법과 같기를 원하지만 아무 것도 인쇄되지 않습니다. grep
올바른 명령을 사용하고 있습니까?
답변1
egrep
한 가지 방법은 다음 과 같이 사용하는 것입니다 grep -E
.
rpm -qa | egrep -i '.*gcc.*'
제공된 검색 문자열을 정규식으로 사용합니다. 여기서 마침표(.)는 임의의 문자를 나타내고 별표(*)는 그 중 하나 이상을 나타냅니다.
나는 당신이 사용하려는 것이 rpm -qa | grep -i *gcc*
파일 이름 글로빙(filename globbing)이라는 대부분의 쉘 기능이라고 생각합니다. 이 기술은 grep에서는 작동하지 않습니다. gcc
여기서는 명시적으로 지정하지 않고 첫 번째 예에서와 같이 모든 것이 문자열에 포함되기를 원한다고 가정합니다 .
*gcc*
편집: 과의 차이점은 .*gcc.*
첫 번째 오류가 실제로는 egrep에 대한 구문 오류라는 것입니다. 하지만 아마도 이를 알려주지는 않을 것입니다. 별표(*)는 이전 문자 다음에 오는 0개 이상의 문자에 관심이 있음을 정규식 구문 분석기에 알려주는 수정자입니다. 첫 번째 표현식에서는 작은따옴표(')가 포함되지 않으므로 선행 문자가 없습니다.