예.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
두 번째 파일 이름입니다.
분명히 모든 특수 문자와 따옴표를 인용할 수 있지만 스키마를 전혀 수정할 필요가 없으므로 여기 문서를 사용하는 것이 약간 더 쉽습니다.