0

我有一个这样的 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' at the start of a line
grep 'sometext2$' files = 'sometext2' at the end of a line

问题是:我如何将 if else 写入我的 bash 代码来识别 * 是在前面还是后面?

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

任何帮助都会很棒。

谢谢

4

1 回答 1

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,否则为 1。

希望这可以帮助。

于 2013-10-09T08:09:25.567 回答