xxd 输出不带换行符

xxd 输出不带换行符

我可以告诉xxd不要在其输出中打印任何换行符并将转储作为一个连续行吗?

[user@localhost] : ~ $ echo -n "this is a long line and xxd is going to take multiple lines to print it" | xxd -p
746869732069732061206c6f6e67206c696e6520616e6420787864206973
20676f696e6720746f2074616b65206d756c7469706c65206c696e657320
746f207072696e74206974

答案1

您需要的是 -c 选项。

# echo -n "this is a long line and xxd will print it as one line" | xxd -p -c 1000000

746869732069732061206c6f6e67206c696e6520616e64207878642077696c6c207072696e74206974206173206f6e65206c696e65

以下是来自文档:

-c 列 | -cols cols 每行格式化八位字节。默认 16(-i:12,-ps:30,-b:6)。最大 256。

文档说“c”参数的最大值是 256,但我尝试了更大的值并且它有效。一探究竟:

# xxd -c 1000000 -p -l 1000000 /dev/urandom | wc -c
2000001

在这里,我从 /dev/random 转储 100 万字节,得到一个 200 万 + 1 个字符的字符串。 /dev/random 中的每个字节由 2 个字符表示,附加字节是最后的换行符。

答案2

版本xxd2022-01-14(附带vim8.2.4088) 或更新版本,您现在可以使用-pand-c并将其值设置为 0,如手册页:

-c |-cols

格式每行八位位组。默认 16(-i:12、-ps:30、-b:6)。最多 256。没有最大值-ps。对于-ps,0 会产生一长行输出。

例如:

$ echo "Lorem Ipsum is simply dummy text of the printing and typesetting industry." | xxd -p -c0 
4c6f72656d20497073756d2069732073696d706c792064756d6d792074657874206f6620746865207072696e74696e6720616e64207479706573657474696e6720696e6475737472792e0a

相关内容