我正在尝试使用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_
#
脚本出了什么问题?
答案 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)