我已经阅读了一些内容,但似乎无法解决这个特殊问题。我正在写一个shell脚本。我正在使用
将文件读取到变量LOCAL_CONFIG=`cat local-config.php`
哪条线像这样
define( 'DB_USER', 'abcxyz' );
define( 'DB_PASSWORD', 'qwerty' );
如何获取abcxyz和qwerty部分?
提前致谢
答案 0 :(得分:2)
$ awk -F"'" '/^define\(/ {print $4}' local-config.php
abcxyz
qwerty
说明:
-F"'"
这将字段分隔符定义为单引号。
/^define\(/
这会选择以define(
print $4
对于那些选定的行,这将打印第四个字段。
$ sed -rn "/^define\(/ {s/([^']*'){3}//; s/'.*//; p;}" local-config.php
abcxyz
qwerty
-rn
这会打开扩展的正则表达式语法并关闭自动打印。
/^define\(/
这会选择以define(
{
这会启动一个小组。该组中的命令仅对选定的行执行。
s/([^']*'){3}//
这将删除所有文本,包括第三个引号。
s/'.*//
这将删除下一个剩余引号后的所有文本。
p
打印该行。
}
这结束了小组。
答案 1 :(得分:0)
使用grep和-P
参数启用perl-regexp模式。
$ grep -oP "\bdefine\( *'[^']*' *, *'\K[^']*(?=' *\);)" file
abcxyz
qwerty
\K
会丢弃先前在匹配时打印的匹配字符。
答案 2 :(得分:0)
“cut”命令将以更简单的方式执行...
<强>命令:强>
cat local-config.php | cut -d "'" -f4
<强>输出:强>
abcxyz
qwerty
<强>解释强>
使用cut作为分隔符,我们需要在行中取第四部分(f4)。