BASH에서 선택한 텍스트의 문자열/패턴 검색

BASH에서 선택한 텍스트의 문자열/패턴 검색

선택한 텍스트에 "-----BEGIN PGP MESSAGE----" 문자열이 나타나면 선택한 텍스트의 암호를 해독하고 싶습니다. 다음 코드가 있지만 아무것도 표시되지 않습니다.

#!/bin/bash
xsel > pgp.txt
if [grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt]
then
gnome-terminal --command "gpg -d -o decrypted.txt pgp.txt"
gedit decrypted.txt
fi

텍스트를 선택한 후 터미널에서 실행하면 다음과 같이 표시됩니다.

line 3: [grep: command not found

저는 bash 스크립팅을 처음 접했습니다. 어떤 도움이라도 주시면 감사하겠습니다.
감사합니다

답변1

혼란스럽게도 [실제로는 프로그램이며 다음과 같이 알려져 있습니다.테스트 (1). grep 명령을 [. 어떤 용도로 사용하려면 [왼쪽 대괄호를 공백 문자로 구분해야 합니다.[ foo == bar ]

if 구문은 다음과 같습니다.help if

if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi

The `if COMMANDS' list is executed.  If its exit status is zero, then the
`then COMMANDS' list is executed. 

당신이 원하는 명령은 아마도 이와 비슷할 것입니다.

if grep -q -e "-----BEGIN PGP MESSAGE-----" pgp.txt; then
   ...
   ...
fi

답변2

[ 뒤에는 공백이 있어야 합니다. 그리고 grep은 문자열을 반환하므로 테스트가 실패할 수 있습니다. grep의 종료 상태를 확인하는 것이 좋습니다.

grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
exitcode=$?
if [ $exitcode ]
then
   # not found
else
   # found 
fi

답변3

[구문이 아니라 명령입니다. 명령 과 동일합니다 test.

작동하는지 확인하려면 대괄호를 제거하세요.

#!/bin/bash
xsel > pgp.txt
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
    gnome-terminal --command "gpg -d -o decrypted.txt pgp.txt"
    gedit decrypted.txt
fi

업데이트:

귀하의 경우에는 왼쪽 대괄호 뒤에 공백을 삽입해도 작동하지 않습니다.

if [ grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt ]
then

bash는 다음과 같이 확장하기 때문입니다.

if test grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then

오류 가 발생합니다 line 3: [: too many arguments.

[명령 이라는 것을 기억하세요 . 인수와 프로시저에 종료 코드를 사용합니다.

grep다음을 사용하여 의 표준 출력을 삭제할 수도 있습니다 .

if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt >/dev/null
then

관련 정보