【问题标题】:Read characters from a text file using bash使用 bash 从文本文件中读取字符
【发布时间】:2009-06-10 11:16:11
【问题描述】:

有谁知道我如何使用 bash 脚本从文件中读取前两个字符。有问题的文件实际上是一个 I/O 驱动程序,它没有换行符,实际上是无限长的。

【问题讨论】:

  • 这是一个编程问题,但我认为您可能会在 Serverfault.com 上得到更快的响应。那些家伙知道他们的脚本。

标签: linux bash file-io


【解决方案1】:

read 内置支持 -n 参数:

$ echo "Two chars" | while read -n 2 i; do echo $i; done
Tw
o
ch
ar
s

$ cat /proc/your_driver | (read -n 2 i; echo $i;)

【讨论】:

  • 如果前两个字节之一在 $IFS 中,则可能无法正常工作,dd 会这样做
  • 是的,但据我所知,没有其他 BASH 方法可以做到这一点。
  • 不管怎样,只要你用的是单一的名字,应该没有问题,因为当你将一行拆分成多个名字(或变量)时,$IFS 进入了图片。跨度>
【解决方案2】:

我认为 dd if=your_file ibs=2 count=1 会成功的

用 strace 查看它表明它实际上是从文件中读取两个字节。 这是一个从 /dev/zero 读取的示例,并通过管道传输到 hd 以显示零:

dd if=/dev/zero bs=2 count=1 | hd
1+0 enregistrements lus
1+0 enregistrements écrits
2 octets (2 B) copiés, 2,8497e-05 s, 70,2 kB/s
00000000  00 00                                             |..|
00000002

【讨论】:

  • 是的,这个比 read -n 对于二进制文件更健壮(尤其是对于 IFS 中的字节)。 V=dd if=/dev/whatever bs=2 count=1 2>/dev/null
【解决方案3】:
echo "Two chars" | sed 's/../&\n/g'

【讨论】:

    【解决方案4】:

    生日,

    为什么不使用 od 来获取您需要的切片?

    od --read-bytes=2 my_driver
    

    编辑:您不能为此使用 head,因为 head 命令会打印到标准输出。如果前两个字符不可打印,则您什么也看不到。

    od 命令有几个选项可以根据需要格式化字节。

    【讨论】:

    • 这些灵魂可以在很多系统上运行,但我使用的是没有安装 head 或 od 的嵌入式系统。
    • 你没有头脑,但有所有的阅读选项?我的嵌入式环境正好相反 :) 我经常把 dd 放在我构建的任何嵌入式系统中
    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2013-05-29
    • 2012-05-09
    相关资源
    最近更新 更多