【问题标题】:Very basic replace using sed使用 sed 进行非常基本的替换
【发布时间】:2010-09-16 21:25:18
【问题描述】:

真的很感激这方面的帮助。

我正在使用 sed 创建一个 CSV 文件。基本上多个 html 文件都合并到一个 html 文件中,然后使用 sed 删除所有垃圾图片等以获取原始列数据。

我已经完成了所有这些工作,但卡在了最后一点。

我想要做的是非常基本的 - 我想替换以下几行:

"a variable string"
"end td"
"begin td"

单行:

"a variable string" 

(此行末尾有一个制表符)

我正在使用 DOS。

如你所见,我对这一切都很陌生。如果我能完成这项工作,将来会为我节省大量时间,因此将不胜感激。 目前我必须将一些 html 标头重新注入文本文件,在 html 编辑器中打开它,选择表格,然后将其粘贴到电子表格中,这有点痛苦。

附:有没有一种简单的方法可以让 sed 从给定的行中删除括号 '(' 和 ')'?

【问题讨论】:

  • DOS?你生气吗? (DOS 有 sed 吗?)
  • 是的:gnuwin32.sourceforge.net/packages/sed.htm sed 允许我从 HTML 文件中提取部分文本,然后转储到新文件中
  • 我怀疑不是DOS,而是Windows中的CMD shell。
  • 您不应将不是问题答案的内容发布为“答案”。这不像通常的论坛那样工作。如果您需要提供其他信息或使用 cmets(就像您曾经做过的那样)进行简短回复,您应该编辑您的原始问题。我应该用您的示例中包含的“td”猜到您正在处理 HTML。 sed 不适合这项工作。您应该使用专门用于 HTML 的东西(并且您的问题应该很清楚)。用户不能授予徽章 - 系统会根据收到的选票等来授予徽章。但是,您可以标记答案...
  • ... 被接受,当你有更多的声望点时,给他们投票。这些都是大多数新用户不熟悉的东西,所以不要觉得我在批评。请阅读常见问题解答了解更多信息。

标签: sed substitution


【解决方案1】:

我怀疑这是你真正想要的,但这是你要求的。

sed "s/\"a variable string\"/&\t/; s/\"end td\"//; s/\"begin td\"//" inputfile

您可能想要做的是在它们连续出现时替换它们。您可以这样做:

sed "1{N;N}; /\"a variable string\"\n\"end td\"\n\"begin td\"/ s/\n.*$/\t/;ta;bb;:a;N;N;:b;$!P;N;D" inputfile

这将删除文件中的所有括号:

sed "s/[()]//g" inputfile

要选择特定的行,您可以执行以下操作:

sed "/foo/ s/[()]//g" inputfile

只有当单词“foo”出现在一行中时才会进行替换。

编辑:将单引号改为双引号以适应 GNUWin32 和 CMD.EXE。

【讨论】:

  • cmd.exe 讨厌单引号。 sed " ... " file
  • @user229426:我刚刚在CMD 提示符下尝试了 Cygwin sed,它在使用单引号时效果很好。当我用 GNUWin32 sed 尝试它时,我收到一个错误,抱怨单引号。我将编辑我的答案。
【解决方案2】:

我之前留下的评论似乎没有保存 - 所以会再试一次

删除 ( 和 ) 的代码运行良好,谢谢

您是对的 - 我希望将 3 行合并为一行,因此您给出的第二个示例看起来将接下来的两行读入模式空间看起来更有希望。然而,输出不是我所期望的。

我现在意识到代码将变得更加复杂,我不想再麻烦您了,因为我手动将一些 html 代码注入文本文件并在 Openoffice 中打开并粘贴到电子表格只需要几秒钟,我感觉手动生成 sed 编码将是一场噩梦。

基本上转换 html 的规则需要是: [每个标签都已格式化,因此它出现在自己的行中] 我在下面给出了输入文件和所需输出文件的示例以供参考

1) 如果

后跟 在下一行完全删除 和 行 [即不输出回车] 并在 NEXT 行在该行的开头粘贴一个 " [此行末尾的回车无关紧要,因为稍后将对其进行编辑]

2) 如果后面跟着 完全删除这两行[再次不要在这些行之后输出回车] 并且在PREVIOUS行上输出一个“,[不要输出回车] 并在 NEXT 行棒上“在行的开头[不用担心结尾的回车将在稍后编辑]

3) 如果

后跟 删除这两行,并在前一行的行尾添加一个“at”和最后一个回车。

我已经给出了输入和期望输出的示例:

输入:http://medinfo.redirectme.net/input.txt

[想要的文件将在下一条消息中发布 - 此版块将不允许新用户发布包含多个超链接的消息!]

还有一个额外的问题是地址列在输入文件的多行上 - 这可以通过查看 NEXT 行的第一个字符是否是“ 如果不是然后执行不输出当前行尾的回车

呸,只是打字简直就是一场噩梦,别管实际的代码了。但再次感谢您为实现这一目标所提供的所有帮助! :-)

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2020-02-27
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多