我想使用 sed 从一组文件中收集顶部,并将收集到的结果输出到摘要文件中。我目前正在做的几乎可以工作:
for i in foo/*/bazz.txt; do sed '/regexp/ q' $i >> bazzdigest.txt; done
问题是匹配 /regexp/ 的行也被包括在内。我不想包含它,所以我有一个额外的步骤来进入文件并在之后删除它。有没有办法做到这一点,以使该行不被包括在内?
试试这个:
for i in foo/*/bazz.txt; do sed '/regexp/,$ d' $i >> bazzdigest.txt; done
这意味着从正则表达式到结束,删除..
如果您使用的是 GNU sed,请Q
使用q
:
for i in foo/*/bazz.txt; do sed '/regexp/ Q' $i >> bazzdigest.txt; done
这将输出匹配之前的所有行,不包括匹配本身。
请注意,该Q
命令是 GNU 扩展。
awk 解决方案:
for i in foo/*/bazz.txt; do awk '/regexp/ {exit} {print}' "$i" >> bazzdigest.txt; done