使用“sed”从文件中获取子字符串

时间:2012-01-13 08:24:41

标签: bash sed substring

任何人都可以帮助我使用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/'

它运行正常,但是如果有任何方法可以用一行代码进行相同的操作吗?

4 个答案:

答案 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是您所需行的行号