我想使用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

08-25 20:48