我有“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`"
但我错了。
答案 0 :(得分:3)
尝试这样做:
grep '^exp ' file.txt | sed 's/^exp //' | paste -sd '|'
甚至更好,不需要grep
,sed
cad本地做:
sed -n '/^exp/s/^exp //p' file.txt | paste -sd '|'
最后但并非最不重要的,如果您对perl单行开放:
perl -ne 'push @arr, $1 if /^exp (.*)/;END{print join "|", @arr}' file.txt
答案 1 :(得分:2)
您可以保存grep
和sed
,并使用单个流程: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