터미널에 붙여넣은 텍스트를 구문 분석하는 함수를 만들고 싶습니다.
$ cat <<eof | grep --color sometext
> foo
> sometext
> sometext1
> a sometext
> asdf
>
> eof
sometext
sometext1
a sometext
위의 작업이 작동하는 동안 별칭이나 해당 기능을 만들 수 없습니다.
alias gsi='cat <<eof | grep --color "$1"'
gsi { cat <<eof | grep --color "$1" ; }
함수 정의시 리디렉션이 수행되지 않는 것 같습니다.
답변1
alias 'gsi=<<eof grep --color'
대체가 다시 쉘 코드로 해석되는 전처리기 텍스트 대체와 같은 별칭으로 작동할 수 있습니다.
당신의 시스템은 당신이 했던 방식대로 작동하지 않습니다 "$1"
. gsi file.txt
로 대체된 cat <<eof | grep --color "$1" file.txt
셸은 명령줄 해석을 진행하며, $1
이 시점에서 미리 수행하지 않는 한 셸의 첫 번째 위치 인수는 비어 있을 수 있습니다 set something
. 그래서 "$1"
여기서 삭제하고 싶습니다 . UUOC를 삭제할 수도 있습니다.
gsi() { cat <<eof | grep --color "$1" ; }
eof
그 뒤의 행이 누락되었기 때문에 구문론적인 관점에서 볼 때 잘못된 것입니다 cat <<eof
.
답변2
귀하의 함수에서는 다음 문서를 사용하지 않습니다.
gsi () {
grep --color "$@"
}
grep
이렇게 하면 공개 라인에서 다른 옵션과 함께 패턴을 전달 하고 grep
표준 입력에서 읽을 수 있습니다.
을 누르면 입력이 종료되었음을 알립니다 Ctrl+D.
위 내용은 붙여넣은 내용과 결과가 혼합된 것일 수 있습니다 grep
. 먼저 붙여넣은 내용을 모아주세요그 다음에실행하려면 grep
다음과 같은 것을 사용할 수 있습니다.
gsi () {
trap 'rm -f "$buffer"' RETURN
local buffer="$(mktemp)"
cat >"$buffer" && grep --color "$@" "$buffer"
}
grep
여기서 붙여넣은 출력은 실행되기 전에 임시 파일에 저장됩니다. 함수가 종료되면 임시 파일이 삭제됩니다. bash
여기에 문서를 붙여 넣을 때 뒤에서 일어나는 일이 대략 이렇습니다 .
답변3
터미널에 붙여넣고 싶다고 말씀하셨습니다. here-doc를 완전히 버리고 적절한 클립보드 유틸리티 xclip
( 예 pbpaste
: Mac OS X의 경우)를 사용하세요. 이 작업이 xclip
완료됩니다.
xclip -o -sel clip | grep --color 'sometext'
당신은 또한 볼 수 있습니다"xclip" 대 "xsel"두 유틸리티의 차이점에 대해.