使用简单的Shell脚本修复HTML格式

如果您经常在编辑器中编写HTML,然后粘贴到WordPress中,则会发现有时会添加烦人的格式标签(例如标签)。使用简单的Shell脚本,您可以使用一些简单的命令自动清除垃圾HTML格式。

为什么要使用Shell脚本?如果您是编程新手,那么从小做起会更好。您不仅会减少放弃的机会,而且还将有机会沿途停下来学习。就是说,即使您的第一个程序也非常简单,它也确实非常有用。

Shell脚本是开始编码的一个好地方,因为这个确切的原因:很容易将几行内容组合在一起可以节省大量时间的代码。让我们看一些食谱或“模式",您可以将它们重新用于自己的脚本中。

为什么要使用Shell脚本?

首先,让我们先定义“ shell脚本"作为编写脚本在Bash shell中运行。从技术上讲,其他脚本语言(例如Powershell)也可以称为“ shell脚本"。但是,为什么首先要着重于一般的shell脚本,尤其是Bash脚本?

  • Windows版Linux子系统,Bash Shell现在与所有主要PC平台兼容,可以从Google Play免费下载源代码。
  • Shell脚本使您可以专注于编程基础,因为最繁重的工作是您将通过包含的命令进行操作。假设您要压缩用C编写的传统桌面应用程序中的某些文件。您将需要编写一些代码以使用兼容的软件库来完成此工作,或者编写很多代码从头开始实际执行压缩。在Shell脚本中,您所需要做的就是在所需文件上运行 tar 命令。
  • 您可以以交互方式逐步进行开发。继续上面的示例,假设您已经决定使用 tar 进行压缩,但是您不确定要使用哪个选项。只需在提示处试用它,直到获得所需的结果,然后将您使用的命令复制/粘贴到脚本中即可。
  • 记住以上几点,这里有一些有用的shell提示您可以将脚本与几行代码放在一起。我们将构建一些脚本来增强Pandoc转换实用程序已经相当强大的功能。

    1。收集参数的长列表

    使用Shell脚本的最简单,最直接的方法是作为现有命令的快捷键。某些命令行程序带有大量标志,它们的语法并不总是很清楚。但是,您可以采用这些命令之一以及所有复杂的选项,然后将其放入具有易于输入名称的Shell脚本中。考虑以下命令,该命令在Markdown文件上运行Pandoc并使用模板文件创建ODT文件:

    pandoc -r markdown -w odt --reference-odt=/path/to/folder/containing/mscript-template.odt -o manuscript.odt manuscript.md

    我每天都使用Pandoc,因为我使用Markdown这样的轻量级标记编写了所有内容。但是,当转换为ODT时,我键入“ odt-reference"而不是“ reference-odt"。单。时间。另外,模板路径不会像大多数Shell命令一样自动完成。创建一个简单的脚本可以节省所有的混乱:

    #! /bin/bashpandoc -r docbook -w odt --reference-odt=/path/to/folder/containing/mscript-template.odt -o $1.odt $1

    脚本的第一行指示系统使用Bash shell运行它。下一个在命令行中使用第一个参数( $ 1 ),并在其上运行带有一组标志的Pandoc。值得注意的是,还有其他方法可以做到这一点,例如在Unix-ish系统上使用 alias 命令。但是制作小型Shell脚本意味着您可以方便地使用它们(例如,在〜/ bin文件夹中),可以在其他位置快速复制(或同步)它们,并使用任何文本编辑器进行更改。使用易于记忆并键入的文件名保存脚本(例如“ markdown2odt.sh")。别忘了赋予它可执行权限。

    2。将输出管道化为干净的HTML格式

    将两个终端命令与管道字符(“ |")相连,会使第一个命令的输出用作第二个命令的输入。 (如果您以前从未见过,请查看我们的命令行快速指南。)但是必须以正确的顺序,使用正确的参数键入两个命令,只会加剧我们所遇到的问题讨论过。将这个双重命令包装在shell脚本中使它变得更加方便。

    与Pandoc一起使用的一个技巧是“清理" HTML格式,或删除所有内联样式。如果您曾经尝试将文字处理程序文档导出为HTML,则可以看到在文本中以及文本之间添加了大量的样式( span 标签)。

    Docbook XML格式没有内联样式的约定,因此,如果我们将HTML转换为DocBook,则所有这些格式都将被丢弃。然后,我们可以使用Pandoc将DocBook 后退转换为HTML,然后我们会获得一些不错的标记,您可以(例如)将其粘贴到WordPress中。以下脚本将它们链接在一起,而不是通过单独调用Pandoc来做到这一点:

  • 将导出的HTML文件转换为没有内联样式(在管道之前)的DocBook
  • 将DocBook转换回现在很好的,干净的HTML格式(在管道之后)
  • #! /bin/bashpandoc -w docbook $1 | pandoc -r docbook -w html -o $1 -

    以上内容利用了“标准输入"和“标准输出"的终端概念。如果要运行在命令的第一部分,您将在终端中看到一堆XML。我们之所以没有给Pandoc使用任何其他输出(例如文件),是因为因此,它使用的只有它的后备:标准输出,在这种情况下为终端。

    另一方面,第二个Pandoc命令末尾的破折号表示它应使用“标准输入"。单独运行,会提示您,shell将等待您通过键盘的默认输入提供一些文本。当我们将它们组合在一起时,您几乎可以想象第一个命令将一堆XML拆分到终端,然后立即将它通过管道传递到第二个命令作为输入。

    结果是,如果将其重命名为“ clean-html.sh",您可以在任何HTML文件上运行它来摆脱那些麻烦的样式。最好的部分是Pandoc将从文件中读取,然后在最后将其覆盖,这意味着没有临时文件。

    3。在多个HTML文件上运行程序

    某些程序允许您在命令行中指定通配符,例如星号。例如,这使您可以将所有JPG图像移动到“ Pictures"文件夹中。

    mv *.jpg ~/Pictures

    但是其他程序一次只能输入一个文件,而Pandoc就是其中之一。那么,当我们拥有一个完整的目录,其中包含导出的HTML文件的整个目录并且我们想要清理HTML格式时,会发生什么?我们需要在每个工具上手动运行“ clean-html.sh"脚本吗?

    否,因为我们不是新手。我们可以将管道命令包装在“ for-each"循环中。这将依次转到当前目录中的每个HTML文件,并对其执行清理操作。让我们还通过 echo 语句添加一条消息,让我们知道所有文件都已处理完毕。

    for filename in ./*.htmldo  pandoc -w docbook $1 | pandoc -r docbook -w html -o $1 -  echo "Working on $1... HTML is clean!"done

    现在,如果您的文件夹中充满了“脏" HTML ,您可以在该脚本上运行该脚本,并得到一些闪闪发光的HTML格式。

    从这里去哪里

    如果您喜欢修补程序,那么您会喜欢shell脚本,因为总是需要进行调整。关于如何将这些模式用作其他脚本基础的一些想法包括:

  • 直接从文字处理器文件添加对转换的支持,因为Pandoc支持ODT和DOCX输入(即,链变为ODT / DocBook XML> HTML。
  • 为用户提供其他导出选项,例如PDF(通过if-then或case语句基于输入添加选择)。
  • 如您所见,使用shell脚本,您可以一次构建一些东西,在提示时对其进行测试,然后随便将它们添加到脚本中。

    您怎么说,shell脚本现在看起来是否有点吓人了?您准备好尝试自动化最枯燥的任务吗?如果您决定加入,请让我们知道它在注释的下方!

    标签: HTML 脚本