따옴표 안의 grep 따옴표

따옴표 안의 grep 따옴표

예.txt

alias znm="base64"
alias asu="sed 's/.\{4\}/&™/g'"
alias mmk="sed 's/\(.\{4\}\)\™/\1/g'"
alias mmk="sed 's/\(.\{8\}\)\™/\1/g'"

원하는 출력:

alias asu="sed 's/.\{4\}/&™/g'"

하지만 이것을 시도하면 오류가 발생합니다.

grep -wo "alias asu="sed 's/.\{4\}/&™/g'"" example.txt

옳은 일은 무엇입니까?

답변1

grep -Fx -f /dev/stdin example.txt <<'PATTERN'
alias asu="sed 's/.\{4\}/&™/g'"
PATTERN

이렇게 하면 따옴표 및 정규식 문자 관련 문제를 방지하고 패턴을 grep있는 그대로 표준 입력에 전달합니다. 이 유틸리티는 표준 입력에서 패턴을 읽습니다. 이를 위해 를 사용하도록 grep요청했기 때문입니다 (Android에서는 대신 를 사용할 수 있음 ).-f /dev/stdin-f /dev/fd/0

-F패턴을 정규 표현식이 아닌 문자열로 사용하고 -x패턴과 정확히 일치하는 줄만 일치하는지 확인합니다(마치 패턴이 줄의 시작과 끝에 고정된 것처럼).

특정 별칭이 파일에 있는지 테스트하려면 다음을 사용하세요.

if grep -q -Fx -f /dev/stdin example.txt; then
    echo the alias is there
else
    echo the alias is not there
fi <<'PATTERN'
alias asu="sed 's/.\{4\}/&™/g'"
PATTERN

주문,

grep -wo "alias asu="sed 's/.\{4\}/&™/g'"" example.txt

실제로는 grep패턴을 사용하여 호출됩니다.파일 이름:

  • "alias asu="sed패턴입니다(실제로는 하나를 사용하지 않기 때문에 정규식입니다 -F).
  • 's/.\{4\}/&™/g'""쉘이 인용되지 않은 공백에서 문자열을 분리하기 때문에 첫 번째 파일 이름입니다.
  • example.txt두 번째 파일 이름입니다.

분명히 모든 특수 문자와 따옴표를 인용할 수 있지만 스키마를 전혀 수정할 필요가 없으므로 여기 문서를 사용하는 것이 약간 더 쉽습니다.

관련 정보