在BASH中的选定文本中搜索字符串/模式

时间:2012-08-27 06:34:54

标签: linux bash shell

如果所选文本中出现字符串“----- 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脚本的新手。任何帮助都会受到赞赏..
谢谢

3 个答案:

答案 0 :(得分:1)

它将名为[grep的可执行文件搜索为if参数。 if执行其then或else分支,具体取决于其参数是否成功执行。是的,[是一个命令(test btw的同义词)。你可能想要

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

(已添加-q,因此grep不会输出任何内容。)

答案 1 :(得分:0)

我认为你错过了一些元素:

  • 空格:开场后有一个'[',另一个在结束前']'
  • 反引号:因为您需要测试执行的grep命令的结果
  • a';'在结束']'
  • 之后

这是一个重写版本:

if [ `grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt` ]; then
  gnome-terminal --command "gpg -d -o decrypted.txt pgp.txt"
  gedit decrypted.txt
fi

答案 2 :(得分:0)

我想建议你两个变种。两者都是平等的

if $(grep -q -- "-----BEGIN PGP MESSAGE-----" pgp.txt);
then

OR

if $(grep -qe "-----BEGIN PGP MESSAGE-----" pgp.txt);
then