#byte-stream #input-stream #input-file #replace #delete #cut #add

app bytie

bytie 允许从命令行添加、删除、替换和剪切输入字节的流或文件中的字节

1 个不稳定版本

0.1.0 2020年3月8日

#12 in #cut

每月 28 次下载

BSD-3-Clause

44KB
1K SLoC

bytie - 方便的字节流操作

crates.io License

预览

TODO 图片在这里

说明

bytie 允许添加、删除、替换和剪切输入字节的流或文件中的字节。当然,你可以使用 dd 做同样的事情,但我认为它的命令行界面有时有点繁琐。

安装

从源代码构建

克隆仓库

> git clone https://github.com/awidegreen/bytie.git
> cd bytie

使用 cargo 构建 和安装。注意,你需要一个相当新的Rust版本。

> cargo install --path .

通过Cargo

注意:尚未发布

从crates.io安装 bytie

> cargo install bytie

用法

示例

在某个位置添加一个字符串。

> echo "foobar" | bytie add -v WORLD 3
fooWORLDbar

在某个位置替换一个字符串,替换数据来自 STDIN

# create test file
> echo "foobar" > test

> echo -n "FOO" | bytie test replace 0
FOObar

从输入中剪切/提取字节。

# note positional argument (range)
> echo "foobar" | bytie cut 1:4
ooba

从输入中删除字节。

# note positional argument (length)
> echo "foobar" | bytie delete 1+3
fr

一般 bytie 选项

bytie 有几个通用的命令行选项,这些选项对所有子命令都是有效和可用的

  • -b|--blocksize: 默认情况下,bytie 使用 1024 字节的块大小从输入中读取,可以使用此选项进行更改。
  • -o|--out: 如果结果应该写入文件而不是 STDOUT,请使用此选项。
  • -i|--in-place: 将字节操作输出写入提供的输入 <file>。这仅适用于已指定 <file> 的情况。
  • <file> (可选): 作为子命令操作数据源的输入文件。

注意:根据<file>参数的规范,bytie将决定输入数据来源。这意味着,如果省略了<file>,则STDIN将作为相应子命令操作的输入流。在这种情况下,如replaceadd之类的子命令将不能STDIN获取替换/插入的输入数据。

更多信息请参阅bytie的帮助(-h|--help)。

子命令

bytie提供以下子命令以满足不同的用例

注意: bytie的位置指示符(开始,结束)从索引0开始,所以foobar中的'b'位于索引4

cut - 从输入中提取数据

别名:extract

可以通过提供开始和结束位置(或长度,见以下位置参数说明)来使用,以从输入流中截取/提取特定的字节。

在这个上下文中,“截取”意味着只保留指定的范围。与delete不同,后者会从输入中删除字节。

delete - 从输入中删除数据

别名:remove

从提供的输入流中删除一系列字节。与cut不同,在cut中,指定的范围将是输出。与cut一样,需要指定位置参数(见下文)。

add - 将数据插入输入

别名:insert

在指定的起始位置(begin)将提供的数据插入到输入数据中。要插入/添加的数据可以来自STDIN或子命令的--value参数(如果源数据未通过STDIN提供,则STDIN是可能的)。

replace - 替换输入中的数据

别名:substitute

在指定的起始位置(begin)用提供的数据替换输入数据。要替换的数据可以来自STDIN或子命令的--value参数(如果源数据未通过STDIN提供,则STDIN是可能的)。

bytie将始终写入完整的替换数据,这意味着输出数据可能比输入长。

位置参数

cutdelete子命令需要一个position作为参数。其格式如下

<begin>         Begin to the end of input
<begin>:<end>   Begin to end (exclusive), requires <end> > <begin>
                Example: 'foobar', 0:2 == 'fo' or 3:5 == 'ba'
<begin>:=<end>  Begin to end (inclusive), requires <end> > <begin>
                Example: 'foobar', 0:=2 == 'foo' or 3:=5 == 'bar'
<begin>+<count> Begin plus <count> (exclusive), requires <count> > 0.
                The length includes the begin position: 0+10 is 10 bytes, from 0..9 (same as 0:9)

可能的特性扩展

  • 使用行模式而不是字节模式。所有子命令应表现相同,但不是操作和操纵字节,而是使用行。如果只想查看文件的特定行,这可能很有用——否则如果记得语法,可以使用sed实现。
  • 允许在一个执行中执行多个操作

许可证

版权所有 (c) 2020 - Armin Widegreen

bytie遵循3-Clause BSD许可证(3-Clause BSDhttps://opensource.org/licenses/BSD-3-Clause

依赖关系

~5–17MB
~192K SLoC