文件内容为grep的正则表达式

时间:2013-03-17 15:53:21

标签: regex bash grep

我有“exp regex”行的文件。此文件可以包含其他文本的行。例如:

exp [a-zA-Z].*\.sh~$
exp test
tmp too
exp tmp
trololo

我需要使用egrep file '^exp ' | sed 's/^exp //' grep此文件的内容。结果是:

[a-zA-Z].*\.sh~$
test
tmp

但是我需要用|分隔这个grep结果而不是\ n

[a-zA-Z].*\.sh~$|test|tmp

因为我需要将此结果用作另一个grep正则表达式。例如,打印由嵌套grep:

匹配的文件
ls | egrep "`egrep file '^exp ' | sed 's/^exp //'\`"

嵌套grep |之后sed替代

ls | egrep "[a-zA-Z].*\.sh~$|test|tmp"

或者有更好的方法从文件导出正则表达式并将它们用于过滤器文件吗?

肯特:我怎样才能在减刑中使用它?我知道它是:

ls | egrep "`awk '/^exp /{sub(/^exp /,"");s=(s?s"|":s) sprintf("%s",$0)}END{print s}' file`"

但我错了。

2 个答案:

答案 0 :(得分:3)

尝试这样做:

grep '^exp ' file.txt | sed 's/^exp //' | paste -sd '|'

甚至更好,不需要grepsed cad本地做:

sed -n '/^exp/s/^exp //p' file.txt | paste -sd '|'

最后但并非最不重要的,如果您对单行开放:

perl -ne 'push @arr, $1 if /^exp (.*)/;END{print join "|", @arr}' file.txt

答案 1 :(得分:2)

您可以保存grepsed,并使用单个流程:awk one-liner

awk '/^exp /{sub(/^exp /,"");s=(s?s"|":s) sprintf("%s",$0)}END{print s}' file

测试一下:

kent$  on feature at master!? echo "exp [a-zA-Z].*\.sh~$
exp test
tmp too
exp tmp
trololo"|awk '/^exp /{sub(/^exp /,"");s=(s?s"|":s) sprintf("%s",$0)}END{print s}'
[a-zA-Z].*\.sh~$|test|tmp