Shell脚本编写和使用反斜杠加回记号?
我正试图用Wordpress做一些操作,我正试图为它写一个脚本Shell脚本编写和使用反斜杠加回记号?,shell,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.ph
# 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_
#
脚本出了什么问题?您应该试试
#!/bin/sh
table_prefix=$(awk -F"'" '/^\$table_prefix/{print $2}' wp-config.php)
echo $table_prefix
你应该试试
#!/bin/sh
table_prefix=$(awk -F"'" '/^\$table_prefix/{print $2}' wp-config.php)
echo $table_prefix
这个对你有用吗
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"
这个对你有用吗
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"
这看起来就像grep没有忽略所有不匹配的行一样,当您发出echo$table_前缀而不加引号时,它会将所有空白折叠到一个输出行中,如果发出:echo$table_前缀,您将看到与输出的所有其他空白相匹配 我建议使用以下sed表达式:
table_prefix=$(sed -n "s/^\$table_prefix.*'\([^']*\)'.*/\1/p" wp-config.php)
这看起来就像grep没有忽略所有不匹配的行一样,当您发出echo$table_前缀而不加引号时,它会将所有空白折叠到一个输出行中,如果发出:echo$table_前缀,您将看到与输出的所有其他空白相匹配 我建议使用以下sed表达式:
table_prefix=$(sed -n "s/^\$table_prefix.*'\([^']*\)'.*/\1/p" wp-config.php)
问题在于grep命令:
它要么需要三个反斜杠,而不是一个反斜杠,要么需要使用简单得多的单引号:
table_prefix=$(grep '^$table_prefix' wp-config.php | awk -F"'" '{print $2}')
它也值得使用$。。。一般符号
问题在于反引号删除了反斜杠,因此对shell变量求值,传递给grep的内容很可能只是^,并且每行都以行首开始。问题在于grep命令:
它要么需要三个反斜杠,而不是一个反斜杠,要么需要使用简单得多的单引号:
table_prefix=$(grep '^$table_prefix' wp-config.php | awk -F"'" '{print $2}')
它也值得使用$。。。一般符号
问题是反引号删除了反斜杠,因此对shell变量进行求值,传递给grep的内容很可能只是^,并且每行都以行首开头。输入行是什么样子的?感谢大家的帮助!输入行是什么样子的?谢谢大家的帮助!我更喜欢你的,它可以通过shell运行,但问题和我的一样,只要我把一个文件放入其中并运行它,这个文件和在shell中运行不一样,我更喜欢你的,它可以通过shell运行,但和我的问题一样,只要我把一个文件放进去,运行它,它的工作原理和在shell中运行的工作原理不一样,对你的代码行来说,它是独立的代码行,从shell本身执行,但当它通过shell脚本fileHai Vu运行时,它就不起作用了,如果=操作符触摸字符串,它就不起作用了,与本例类似:$table_prefix='foo_'@斯普特尼克:等号必须由spaces@alexus:我仅在Mac OS X Snow Leopard、Red Hat version?和Linux Mint 12下测试了我的解决方案awk和shell。它们都可以工作,所以问题出在其他地方,我无法访问您的系统来提供帮助。对于您的行,它与从shell本身执行的独立行一样工作,但在通过shell脚本fileHai Vu运行时不工作,如果=运算符触摸字符串,这将不工作,如本例中:$table_prefix='foo_u'@斯普特尼克:等号必须由spaces@alexus:我仅在Mac OS X Snow Leopard、Red Hat version?和Linux Mint 12下测试了我的解决方案awk和shell。它们都可以工作,所以问题出在其他地方,我无法访问您的系统来提供帮助。使用\\\help,我将尝试使用$。。。稍后,另一个技巧是使用字符类[$]代替\$或\\\$或其他任何东西。但是,总的来说,我会使用单引用版本。只有当您需要匹配单引号时,这才会变得混乱。使用\\\Help,我将尝试使用$。。。稍后,另一个技巧是使用字符类[$]代替\$或\\\$或其他任何东西。但是,总的来说,我会使用单引用版本。只有当您需要匹配单引号时,这才会变得混乱。