bash:grep通配符的开始和结束

时间:2013-10-09 03:39:41

标签: linux bash shell grep

我有一个像这样的bash脚本:

TABLE_TO_IGNORE=$(mysql -u $DBUSER -p$DBPASS -h $DBHOST  -N <<< "show tables from $DBNAME" | grep "^$i" | xargs);

目前我只能用grep开头的文字。如何编写用于确定以?

结尾的文本的代码

让我们说1:

我的$ i是: test1_ * tb2_ * TB3 _ *

在后面部分使用*,它将作为以这些值

开头的文本进行grep

让我们说2:

我的$ i是: * _sometext1 * sometext2

前面的*,它将作为以这些值结尾的文本grep。

我知道这一点:
行开头的grep'^ sometext1'files ='sometext1' grep'tometext2 $'files ='sometext2'在一行

问题是:我如何编写if else到我的bash代码中识别*是在前面还是后面?

注意:您可以忽略我的bash代码,我只需要if else条件来确定“*”位于字符串的前面或后面。

任何帮助都会很棒。

由于

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此代码。

#!/bin/bash

stringToTest="Hello World!*" 

echo $stringToTest | grep "^\*.*" > /dev/null
if [ $? -eq 0 ]; then
     echo "Asterisk is at the front" 
fi

echo $stringToTest | grep "^.*\*$" > /dev/null 
if [ $? -eq 0 ]; then
     echo "Asterisk is at the back" 
fi

如此代码所示,我使用退出代码($?)来确定正则表达式是否与字符串匹配。如man grep

所示
  

通常情况下,如果找到选定的行,则退出状态为0   否则。

希望这有帮助。