【问题标题】:Script to fix onelined markdown修复单行降价的脚本
【发布时间】:2014-10-01 23:07:44
【问题描述】:

我正在寻求有关修复降价的帮助。我有很多用 Markdown 编写的文件,但是它们都在一行中,例如:

'''Tittle''' - there is some text. ==Heading== {{Image|l=http://exaple.com}} ==References== *[http://www.example.com] *some text here

为了使这些文件正常工作,我必须在每个特殊字符之前输入新行,例如:

'''Tittle''' - there is some text.

==Heading==

{{Image|l=http://exaple.com}}
Some more text.

==References==

*[http://www.example.com]
*some text here

我正在寻找自动化此过程的方法,有人可以帮助我为此编写 RegEx,或者至少解释一下哪种工具最适合使用它?

【问题讨论】:

  • 在每个字段开始前你有 == 吗?
  • 特殊字符有:==text==、===text===、=text=、*text、'''text'''、''text'',但我认为,如果我看到示例,我可以编辑正则表达式
  • 你能有'''title == foo'''的情况吗?
  • 没有。此外,它是一些 MediaWiki 网站的降价代码。
  • 您的降价文件是如何被这样“损坏”的?看来您应该尝试防止导致源文件“单线”的任何原因。

标签: regex text replace sed tr


【解决方案1】:

我建议如下:

sed 's/[[:space:]]\(=\|{{\|\*\|'\''\)/\n\1/g' your_one_line_file

这考虑了特殊序列======{{*'''''',但仅当它们跟随空格或换行符或制表符等。然后它会用换行符替换该“空格”。

当你转义单引号时要小心:它必须在包含 sed 脚本的引号之外完成,我关闭然后重新打开。

编辑

在 Kuba 的澄清/请求之后,为了让特殊序列包围的字符串末尾有空格,我们编写了一个脚本(将其写入文件中可以减轻巧妙地转义 ' 字符的负担)具有模式- 使用模式本身中的\1 引用匹配行以检测关闭的特殊序列。所以请将以下脚本写入文件,例如sedscr:

s/[[:space:]](=+)([^=]*)\1/\n\1\2\1/g
s/[[:space:]]('+)([^']*)\1/\n\1\2\1/g
s/[[:space:]]\{\{([^}]*)\}\}/\n{{\1}}/g
s/[[:space:]]\*/\n*/g

然后使用-r 选项在您的单行文件上运行脚本,因为我使用扩展正则表达式使脚本更短一些(使用+ 元字符):

sed -r -f sedscr your_one_line_file

【讨论】:

  • 这是不正确的 - 它也在关闭 == 之前添加换行符
  • 当然可以,但前提是在关闭==(或任何其他特殊序列)之前有一个空格。
  • 查看我编辑的解决方案,因为它可以解决这个问题。
猜你喜欢
  • 2017-12-03
  • 1970-01-01
  • 2014-07-30
  • 2013-10-13
  • 1970-01-01
  • 2020-04-28
  • 2017-05-21
  • 2018-10-19
  • 1970-01-01
相关资源
最近更新 更多