1 个不稳定版本
| 0.1.0 | 2020年3月8日 |
|---|
#12 in #cut
每月 28 次下载
44KB
1K SLoC
bytie - 方便的字节流操作
预览
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将作为相应子命令操作的输入流。在这种情况下,如replace和add之类的子命令将不能从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将始终写入完整的替换数据,这意味着输出数据可能比输入长。
位置参数
cut和delete子命令需要一个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 BSD 或 https://open-source.org.cn/licenses/BSD-3-Clause)
依赖关系
~5–17MB
~192K SLoC