【问题标题】:Bash Scripting: Find strings on one line of code and insert on own lineBash 脚本:在一行代码中查找字符串并在自己的行中插入
【发布时间】:2013-02-10 09:09:10
【问题描述】:

我正在尝试编写一个小的 bash 脚本:

  • -wget 每隔 [x] 分钟从 Web 获取一个 html 文件
  • - 使用一些 linux 实用程序来查找最近两次更新之间的文件差异
  • - 使用 sed 修改检测到新文本的行

我遇到的问题是 HTML 文件使用内联 CSS 格式化表格,但页面的实际代码存储在一长行中。

实际上我需要一个可以扫描单行代码的 Linux 实用程序,找到 每个标签之间的每个文本实例,并将这些实例插入它们自己的行。这应该使扫描文本更容易。我尝试过的每个工具都以每行为基础进行搜索,但由于整个代码都存储在一行中,因此无法满足我的需求。

【问题讨论】:

    标签: string bash sed awk


    【解决方案1】:

    您可以先将内容分成几行,方法是将(比如)> 替换为>\n。这将分解每个 HTML 标记末尾的文档。

    也许您甚至不需要这样做:如果您使用 awk 的 RS 变量将记录分隔符定义为“>”而不是换行符。有关使用 RS 的示例,请参阅此页面:http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/

    【讨论】:

    • 我现在正在查看 RS 变量。至于你的第一个例子,我应该使用 sed 用“\n”修改每个“”标签吗?
    • some text 如果你将 RS 设置为 ">" 你会得到 , some text, , 三条记录,从一行。但是,如果您的文本可以包含“>”,它会有点麻烦。
    • 听从 John 的建议,我尝试了 sed -i 's//\n/g' file.html 这成功了!正则表达式令人困惑。
    • 是的,例如,您可以使用 sed 在您感兴趣的每个结束标记之后添加换行符。请注意,大多数版本的 sed 并没有使这变得特别容易,因此请参阅this other answer了解如何这样做:stackoverflow.com/questions/6111679/insert-linefeed-in-sed
    • 关于 sed 表达式:您可以使用斜杠以外的其他字符来分隔 sed 命令(看到的第一个字符将设置 sed 对所有其余分隔符的期望,因此您可以使用任何东西!)。所以你可能会发现这更具可读性:s@</tr>@</tr>\n@g.
    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 2012-08-06
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2019-11-08
    • 2013-11-08
    相关资源
    最近更新 更多