【问题标题】:How to replace or delete lines containing / character in BASH?如何替换或删除 BASH 中包含 / 字符的行?
【发布时间】:2015-07-23 20:51:30
【问题描述】:

我有一个以一些文本行开头并以许多二进制行继续的文件。我需要从开头删除文本行以获得纯二进制内容。假设二进制部分以一个特殊的单词开头,例如:Connection。我尝试使用带有sed 的bash 脚本来删除所有这些文本行。问题是:包含/ 字符的文本行导致sed 将输入中/ 之后的字符解释为单独的命令。我的代码是这样的:

while read line
  do
        sed -i "/"$line"/d" file_name

        if [ "$line" != Connection* ]
                break;

  done < file_name

这样,当变量 "line" 包含 / 字符(例如 css/jj)时,sed 会返回错误:

sed:-e 表达式#1,字符 6:未知命令:`j'

如何将包含/ 字符的变量传递给sed 以删除相关行? 顺便说一句,有没有办法将二进制内容与文件中的文本分开?有时我的文件在二进制部分的开头没有任何特殊的单词或符号来识别它。

【问题讨论】:

    标签: sed binary character


    【解决方案1】:

    您可以安全地将/ 分隔符替换为任何其他字符,前提是您在每次出现时都替换它,有时,我使用§,这在大多数文本中并不常见。

    【讨论】:

    • 感谢您的回答,但正如我在 sed 教程中所读的那样,使用其他分隔符可能只是为了替换(使用标志 s)并且无法删除。幸运的是,我可以通过“最重要的”工具解决我从文件(实际上是从 tcpflow 获得的 tcp 流文件)中提取二进制内容然后自定义其配置的问题。
    • 你是对的,也是错的。 /.../ 形式的地址可以更改为\c...c,其中c 是任何字符。使用命令s/.../.../ 时,分隔符可能会像sc...c...c 这样更改,其中c 是任何字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多