2012-11-19 2 views
3

나는 따옴표를 포함하여 특정 파일에서 grep하고자하는이 전체 행 (아래의 awk에 대한 rpm 명령)을 가지고 있습니다. 나는 grep과 grep -F를 시도 할 때 올바른 결과물을 얻을 수 없을 것 같다. grep 문에서 줄 끝 부분을 지우려고했는데 "!" 문제를 일으킨다. 문자열을 작은 따옴표로 묶으려고했는데 행운도 없습니다. 고맙습니다.grep에서 느낌표를 이스케이프?

rpm -qVa | awk '$2!="c" {print $0}' 
+0

grep 줄의 예제를 추가하면 도움이 될 수 있습니다. 'grep "rpm -qVa | awk '$ 2! ="c "{print $ 0}"' – bonsaiviking

+0

"이벤트를 찾을 수 없습니다"라는 메시지가 뜨면 Bash에서'histexpand' 옵션을 해제하십시오. IIRC 싱글 쿼트는이를 방지해야합니다. – tripleee

답변

-1

백 슬래시 트릭을

rpm -qVa | awk '\$2!="c" {print $0}' 
+1

불행히도 이것은 작동하지 않습니다. –

7
  1. 를 사용하여 작은 따옴표를해야 - 리터럴 따옴표를 필요로 할 때, 단지 작은 따옴표 중퇴, 백 슬래시에 1 점을 추가하는 듯하고,

    grep 'rpm -qVa | awk '\''$2!="c" {print $0}'\' filename

  2. 사용을 두 번 현 : 다음에 다시 갈 TES 및뿐만 아니라 느낌표 백 슬래시 - 탈출하지만, 다른 모든 것들, 그렇지 않으면 쉘로 대체 얻을 것이라고 :

    grep $'rpm -qVA | awk \'$2!="c" {print $0}\'' filename

  3. 사용 A :

    grep "rpm -qVa | awk '\$2\!=\"c\" {print \$0}'" filename

  4. 는 POSIX 문자열을 사용하여 덜 구체적인 패턴 :

    grep 'rpm -qvA | awk .$2.="c" {print $0}.' filename

    또는, 당신은 $2=="c"에 대한 검사뿐만 아니라 $2!="c"이있는 경우, 당신은 같은 것을 할 수있는 :

    grep 'rpm -qvA | awk .$2[^=]="c" {print $0}.' filename

나는 아마 POSIX 문자열, 또는 일반 따옴표 옵션과 함께 갈 것을 - dash과 같은 다른 껍질에서 일하는 것이 논쟁의 여지가 있습니다.

관련 문제