我想使用Jekyll将WordPress网站转换为GitHub上的静态网站。
我使用了一个插件,将我的62个帖子作为Markdown导出到GitHub。现在,在每个文件的开头,我都将这些帖子放在首位。看起来像这样:
---
ID: 51
post_title: Here's my post title
author: Frank Meeuwsen
post_date: 2014-07-03 22:10:11
post_excerpt: ""
layout: post
permalink: >
https://myurl.com/slug
published: true
sw_timestamp:
- "399956"
sw_open_thumbnail_url:
- >
https://myurl.com/wp-content/uploads/2014/08/Featured_image.jpg
sw_cache_timestamp:
- "408644"
swp_open_thumbnail_url:
- >
https://myurl.com/wp-content/uploads/2014/08/Featured_image.jpg
swp_open_graph_image_data:
- '["https://i0.wp.com/myurl.com/wp-content/uploads/2014/08/Featured_image.jpg?fit=800%2C400&ssl=1",800,400,false]'
swp_cache_timestamp:
- "410228"
---
Jekyll无法正确解析此块,而且我不需要所有这些前题。我想将每个文件的前题转换为
---
ID: 51
post_title: Here's my post title
author: Frank Meeuwsen
post_date: 2014-07-03 22:10:11
layout: post
published: true
---
我想用正则表达式来做到这一点。但是我对正则表达式的了解不是很好。在这个论坛和许多Google搜索的帮助下,我并没有走得很远。我知道如何找到完整的前题,但是如何用上面指定的一部分替换它呢?
我可能必须分步执行此操作,但是我无法全神贯注于如何执行此操作。
我使用Textwrangler作为编辑器来进行搜索和替换。
最佳答案
因为我第一次误解了问题,所以编辑帖子时,我无法理解实际的帖子在---之后就在同一文件中
使用egrep和GNU sed而不是内置的bash相对容易:
# create a working copy
mv file file.old
# get only the fields you need from the frontmatter and redirect that to a new file
egrep '(---|ID|post_title|author|post_date|layout|published)' file.old > file
# get everything from the old file, but discard the frontmatter
cat file.old |gsed '/---/,/---/ d' >> file
# remove working copy
rm file.old
如果您一口气想要它:
for i in `ls`; do mv $i $i.old; egrep '(---|ID|post_title|author|post_date|layout|published)' $i.old > $i; cat $.old |gsed '/---/,/---/ d' >> $i; rm $i.old; done
从好的方面来说,这是我写的第一个回复:
================================================== =========
我认为您使这种方式变得过于复杂。
一个简单的egrep可以满足您的要求:
egrep '(---|ID|post_title|author|post_date|layout|published)' file
重定向到新文件:
egrep '(---|ID|post_title|author|post_date|layout|published)' file > newfile
一次完整的目录:
for i in `ls`; do egrep '(---|ID|post_title|author|post_date|layout|published)' $i > $i.new; done