13 个版本 (3 个稳定版本)
1.2.0 | 2024 年 1 月 2 日 |
---|---|
1.1.0 | 2023 年 12 月 2 日 |
1.0.0 | 2023 年 2 月 26 日 |
0.11.0 | 2022 年 6 月 21 日 |
0.4.0 | 2020 年 5 月 31 日 |
#249 in 命令行工具
96KB
2K SLoC
tuc (当 cut 命令无法满足需求时)
您想要 cut
不只是单个字符,可能使用负索引或按照您想要的格式格式化选定的字段...也许您想要按行剪切(是否曾经需要删除或保留第一行和最后一行?)...这就是 tuc 可以帮到的地方。
安装
下载一个预构建的二进制文件
或者运行
# requires rustc >= 1.61.0
cargo install tuc # append `--no-default-features` for a smaller binary with no regex support
有关其他安装方法,请查看下面的 社区管理包
在线试用
没有时间安装?在线玩一个 WebAssembly 版本,tuc 操场
演示
帮助
tuc 1.2.0
Cut text (or bytes) where a delimiter matches, then keep the desired parts.
The data is read from standard input.
USAGE:
tuc [FLAGS] [OPTIONS]
FLAGS:
-g, --greedy-delimiter Match consecutive delimiters as if it was one
-p, --compress-delimiter Print only the first delimiter of a sequence
-s, --only-delimited Print only lines containing the delimiter
-V, --version Print version information
-z, --zero-terminated Line delimiter is NUL (\0), not LF (\n)
-h, --help Print this help and exit
-m, --complement Invert fields (e.g. '2' becomes '1,3:')
-j, --(no-)join Print selected parts with delimiter inbetween
--json Print fields as a JSON array of strings
OPTIONS:
-f, --fields <bounds> Fields to keep, 1-indexed, comma separated.
Use colon to include everything in a range.
Fields can be negative (-1 is the last field).
[default 1:]
e.g. cutting the string 'a-b-c-d' on '-'
-f 1 => a
-f 1: => a-b-c-d
-f 1:3 => a-b-c
-f 3,2 => cb
-f 3,1:2 => ca-b
-f -3:-2 => b-c
To re-apply the delimiter add -j, to replace
it add -r (followed by the new delimiter).
You can also format the output using {} syntax
e.g.
-f '({1}, {2})' => (a, b)
You can escape { and } using {{ and }}.
-b, --bytes <bounds> Same as --fields, but it keeps bytes
-c, --characters <bounds> Same as --fields, but it keeps characters
-l, --lines <bounds> Same as --fields, but it keeps lines
Implies --join. To merge lines, use --no-join
-d, --delimiter <delimiter> Delimiter used by --fields to cut the text
[default: \t]
-e, --regex <some regex> Use a regular expression as delimiter
-r, --replace-delimiter <new> Replace the delimiter with the provided text
-t, --trim <type> Trim the delimiter (greedy). Valid values are
(l|L)eft, (r|R)ight, (b|B)oth
Options precedence:
--trim and --compress-delimiter are applied before --fields or similar
Memory consumption:
--characters and --fields read and allocate memory one line at a time
--lines allocate memory one line at a time as long as the requested fields
are ordered and non-negative (e.g. -l 1,3:4,4,7), otherwise it allocates
the whole input in memory (it also happens when -p or -m are being used)
--bytes allocate the whole input in memory
示例
# Cut and rearrange fields...
❯ echo "foo bar baz" | tuc -d ' ' -f 3,2,1
bazbarfoo
# ...and join them back with the same delimiter
❯ echo "foo bar baz" | tuc -d ' ' -f 3,2,1 -j
baz bar foo
# Replace the delimiter with something else
❯ echo "foo bar baz" | tuc -d ' ' -r ' ➡ '
foo ➡ bar ➡ baz
# Keep a range of fields
❯ echo "foo bar baz" | tuc -d ' ' -f 2:
bar baz
# Indexes can be negative and rearranged
❯ echo "a b c" | tuc -d ' ' -f -1,-2,-3
cba
# Cut using regular expressions
❯ echo "a,b, c" | tuc -e '[, ]+' -f 1,3
ac
# Emit JSON output
❯ echo "foo bar baz" | tuc -d ' ' --json
["foo","bar","baz"]
# Delimiters can be any number of characters long
❯ echo "a<sep>b<sep>c" | tuc -d '<sep>' -f 1,3
ac
# Cut using a greedy delimiter
❯ echo "foo bar" | tuc -d ' ' -f 1,2 -g
foobar
# Format output
❯ echo "foo bar baz" | tuc -d ' ' -f '{1}, {2} and lastly {3}'
foo, bar and lastly baz
# ...with support for \n
❯ echo "100Kb README.txt 2049-02-01" | tuc -d ' ' -f '{2}\n├── {1}\n└── {3}'
README.txt
├── 100Kb
└── 2049-02-01
# Cut lines (e.g. keep everything between first and last line)
❯ printf "a\nb\nc\nd\ne" | tuc -l 2:-2
b
c
d
# Concatenate lines (-l implies join with \n, so we need --no-join)
❯ printf "a\nb\nc\nd\ne" | tuc -l 1,2 --no-join
ab
# Compress delimiters after cut
❯ echo "foo bar baz" | tuc -d ' ' -f 2: -p
bar baz
# Replace remaining delimiters with something else
❯ echo "foo bar baz" | tuc -d ' ' -f 2: -p -r ' -> '
bar -> baz
# Cut characters (expects UTF-8 input)
❯ echo "😁🤩😝😎" | tuc -c 4,3,2,1
😎😝🤩😁
# Cut bytes (the following emoji are 4 bytes each)
❯ echo "😁🤩😝😎" | tuc -b 5:8
🤩
# Discard selected fields, keep the rest
❯ echo "a b c" | tuc --complement -d ' ' -f 2
ac
社区管理包
衷心感谢包维护者:您使访问开源软件变得容易❤️
-
yay -S tuc # compile from source yay -S tuc-bin # install pre-built binaries tuc and tuc-regex
-
Brew:
brew install tuc
-
sudo port install tuc
许可证
Tuc 在 GNU GPL 许可证(版本 3 或任何后续版本)下分发。
有关详细信息,请参阅 LICENSE 文件。
依赖关系
~2.9–4MB
~69K SLoC