我想知道在第二次出现字符串后获取所有内容的最佳方法是什么。我有这样的文件:
---
title: Test Document
creation_date: 01-29-2016
---
Text, blah blah blah
More text, blah blah blah
所以我的文件包含' frontmatter'两个---
之间。我希望在第二个---
之后返回所有内容,最好使用某种bash命令。想到这一点,想到了sed和awk,但我真的不知道哪一个更适合这份工作。
这一点的一个重要部分是前端可以有任意数量的键值对,所以只需切割前四行就不是一种有效的方法。
答案 0 :(得分:3)
使用awk你可以这样做:
awk 'p>1; /---/{++p}' file
Text, blah blah blah
More text, blah blah blah
答案 1 :(得分:2)
使用sed,您可以删除两种模式之间的一系列行:
sed '/---/,/---/d' file
自动显示其他行。
如果你想删除上面的行,你可以使用这个:
sed '1{:a;N;/---.*---/d;ba}' file
细节:
1 # if the current line is the first one
{
:a # define a label "a"
N # append the next line to the pattern space
/---.*---/d # delete the pattern space when the pattern succeeds
ba # go to label "a"
}
请注意,d命令无条件地停止脚本,sed继续其余的行。
答案 2 :(得分:1)
这是一个纯粹的Bash解决方案:
while IFS= read -r line || [[ -n $line ]]; do
if [[ "$line" =~ ^--- ]]; then
(( ++count ))
elif [ $count -ge 2 ]; then
echo "$line"
fi
done <file
您可以像sed一样使用awk来打印该模式匹配范围之外的所有内容,如下所示:
awk '/^---/,/^---/ {next} 1' file