Shell脚本和反斜杠使用反斜杠?

时间:2012-02-28 21:31:27

标签: shell

我正在尝试使用Wordpress进行一些操作,我正在尝试为它编写脚本......

# cat /usr/local/uftwf/_wr.sh 
#!/bin/sh
# $Id$
#

table_prefix=`grep ^\$table_prefix wp-config.php | awk -F\' '{print $2}'`
echo $table_prefix
# 

然而我正在关注输出

# /usr/local/uftwf/_wr.sh 
 ABSPATH ABSPATH wp-settings.php_KEY LOGGED_IN_KEY NONCE_KEY AUTH_SALT SECURE_AUTH_SALT LOGGED_IN_SALT NONCE_SALT wp_0zw2h5_ de_DE WPLANG WP_DEBUG s all, stop editing! Happy blogging. */
# 

从命令行运行,我得到了正在寻找的正确输出:

# grep ^\$table_prefix wp-config.php | awk -F\' '{print $2}'
wp_0zw2h5_
# 

脚本出了什么问题?

4 个答案:

答案 0 :(得分:2)

问题是grep命令:

table_prefix=`grep ^\$table_prefix wp-config.php | awk -F\' '{print $2}'`

它需要三个反斜杠 - 而不是一个 - 或者你需要使用单引号(这更简单):

table_prefix=$(grep '^$table_prefix' wp-config.php | awk -F"'" '{print $2}')

一般来说,使用$( ... )符号也值得。

问题在于反引号删除了反斜杠,因此评估了shell变量,传递给grep的内容很可能只是^,并且每一行都以行的开头开头

答案 1 :(得分:1)

你应该试试

#!/bin/sh

table_prefix=$(awk -F"'" '/^\$table_prefix/{print $2}' wp-config.php)
echo $table_prefix

答案 2 :(得分:1)

这个适合你吗?

 awk -F\' '/^\$table_prefix/ {print $2}' wp-config.php

更新

如果您使用的是shell脚本,则无需调用awk,grep:

#!/bin/sh
while read varName op varValue theRest
do
    if [ "_$varName" = "_\$table_prefix" ]
    then
        table_prefix=${varValue//\'/}   # Remove the single quotes
        table_prefix=${table_prefix/;/} # Remove the semicolon
        break
    fi
done < wp-config.php

echo "Found: $table_prefix"

答案 3 :(得分:1)

这看起来好像grep并没有省略所有不匹配的行,当你发出echo $table_prefix没有引号时它将所有空格折叠成一个输出行,如果你发出一个:echo "$table_prefix",您会看到与输出的所有其他空白区域的匹配。

我建议使用以下sed表达式:

table_prefix=$(sed -n "s/^\$table_prefix.*'\([^']*\)'.*/\1/p" wp-config.php)