任何人都可以帮助我使用sed程序获取子字符串吗?
我有一行文件:
....
define("BASE", "empty"); # there can be any string (not only "empty").
....
我需要将“空”作为字符串变量添加到我的bash脚本中。
此刻我有:
sed -n '/define(\"BASE\"/p' path/to/file.ext
# returns this line:
# define("BASE", "empty");
# but I need 'empty'
UPD:感谢@Jaypal
现在我有bash脚本:
DBNAME=`sed -n '/define(\"BASE\"/p' path/to/file.ext`
echo $DBNAME | sed -r 's/.*"([a-zA-Z]+)".*/\1/'
它运行正常,但是如果有任何方法可以用一行代码进行相同的操作吗?
答案 0 :(得分:6)
你应该使用is
sed -n 's/.*\".*\", \"\(.*\)\".*/\1/p' yourFile.txt
表示某些内容(.*
)后面跟引号(\".*\"
),然后是逗号和空格(,
),然后是引号内的内容({{ 1}})。
括号定义您稍后可以重复使用的部分,即第二个引号中的字符串。与\"\(.*\)\"
一起使用。
我将\1
放在前面,以便回答更新后的问题,让在线处理被操纵的行。
答案 1 :(得分:3)
这应该有帮助 -
sed -r 's/.*"([a-zA-Z]+)"\);/\1/' path/to/file.ext
如果您可以使用awk
,那么您可以尝试以下方法 -
awk -F\" '/define\(/{print $(NF-1)}' path/to/file.ext
DBNAME=$(sed -r '/define\(\"BASE\"/s/.*"([a-zA-Z]+)"\);/\1/' path/to/file.ext)
答案 2 :(得分:1)
sed -nr '/^define.*"(.*)".*$/{s//\1/;p}' path/to/file.ext
答案 3 :(得分:0)
如果您的文件没有随时间变化(即行号始终相同),您可以使用该行,并使用分隔符来解决问题:
`sed -n 'Xp' your.file | cut -d ' ' -f 2 |cut -d "\"" -f 2`
假设X是您所需行的行号