【问题标题】:sed stops fetching the remaining content after a linefeed character is encounteredsed 在遇到换行符后停止获取剩余内容
【发布时间】:2018-12-10 14:01:45
【问题描述】:
sed -nE "s/(IMAGE)(.*)/\1\2/p" somefile > sfh.raw

somefile 在图像之后包含随机 ASCII 和二进制数据。如果文件中没有换行二进制数据,则上述 sed 命令有效。如果有换行符,它只会输出到新行,忽略文件的其余部分。

有没有一种方法可以让 sed (.*) 捕获包括新行在内的所有内容,并一直持续到 somefile 内容结束。

IMAGE254656
   dsfdfdl;flkdfldsfkdsfkdlsfdfldfkdsfo;dsfkldsfdsfsd

【问题讨论】:

  • 试试grep -Eoz 'IMAGE.*' somefile > sfr.raw(如果你有GNU grep
  • sed 's/(foo)(bar)/\1\2/' 毫无意义,因为它是身份转换。
  • sed 逐行操作,我认为你不能让它跨行工作,或者将文件读取为二进制文件。
  • sed 可以跨行工作;它不是为处理二进制数据而设计的。

标签: regex linux sed


【解决方案1】:

考虑为此使用awk

awk '/^IMAGE/{i=1}i' somefile

awk 逐行处理文件,并允许您设置变量并检查每一行的内容和许多其他非常花哨的东西。

此脚本检查每一行是否以IMAGE 开头。如果是这样,它将变量i 设置为1。然后它检查是否设置了i。如果是这样,它会执行打印该行的默认行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多