0

我想使用 sed 从一组文件中收集顶部,并将收集到的结果输出到摘要文件中。我目前正在做的几乎可以工作:

for i in foo/*/bazz.txt; do sed '/regexp/ q' $i >> bazzdigest.txt; done

问题是匹配 /regexp/ 的行也被包括在内。我不想包含它,所以我有一个额外的步骤来进入文件并在之后删除它。有没有办法做到这一点,以使该行不被包括在内?

4

3 回答 3

3

试试这个:

for i in foo/*/bazz.txt; do sed '/regexp/,$ d' $i >> bazzdigest.txt; done

这意味着从正则表达式到结束,删除..

于 2012-06-13T18:56:09.970 回答
1

如果您使用的是 GNU sed,请Q使用q

for i in foo/*/bazz.txt; do sed '/regexp/ Q' $i >> bazzdigest.txt; done

这将输出匹配之前的所有行,不包括匹配本身。

请注意,该Q命令是 GNU 扩展。

于 2012-06-13T18:28:18.837 回答
1

awk 解决方案:

for i in foo/*/bazz.txt; do awk '/regexp/ {exit} {print}' "$i" >> bazzdigest.txt; done
于 2012-06-13T19:02:57.847 回答