2

我有一个文件,我需要使用正则表达式获取一段文本。我们将调用文件x.txt. 我想做的是打开x.txt,从文件中提取正则表达式匹配并将其设置为参数。谁能给我一些指示?

编辑

所以在x.txt我有以下行

$variable = '1.2.3';

我需要将1.2.3文件中的内容提取到我的 bash 脚本中,然后用于 zip 文件

4

3 回答 3

7

用于一次通过sed有效地完成†</sup>:

var=$(sed -ne "s/\\\$variable *= *['\"]\([^'\"]*\)['\"] *;.*/\1/p" file)

无论您的值是用单引号还是双引号括起来,上述方法都有效。

另请参阅GNU Grep 可以输出选定的组吗?.

$ cat dummy.txt
$bla = '1234';
$variable = '1.2.3';
blabla
$variable="hello!"; #comment

$ sed -ne "s/\\\$variable *= *['\"]\([^'\"]*\)['\"] *;.*/\1/p" dummy.txt
1.2.3
hello!

$ var=$(sed -ne "s/^\\\$variable *= *'\([^']*\)' *;.*/\1/p" dummy.txt)

$ echo $var
1.2.3 hello!

† 或至少与在您选择的平台上sed相比可以有效地处理数据。grep:)

于 2012-11-12T02:38:44.503 回答
4

您可以使用 grep-chop-chop 技术

var="$(grep -F -m 1 '$variable =' file)"; var="${var#*\'}"; var="${var%\'*}"
于 2012-11-12T03:03:35.313 回答
1

如果所有文件行都具有该格式 ( $<something> = '<value>'),您可以cut像这样使用:

value=$(cut -d"'" -f2 file)
于 2012-11-12T03:10:19.207 回答