对 awk + xxd bash 命令中的 ASCII 换行字节感到困惑
confusion about ASCII linefeed byte in awk + xxd bash command
我对某些 bash 命令中发生的某些 0a
(即 NL
ASCII 字节)感到困惑。关于以下内容:
$ echo | sha1sum | awk '{print ;}' | xxd -r -ps > test.bin
$ echo | sha1sum | awk '{print ;}' > test.hex
$ xxd test.bin
00000000: adc8 3b19 e793 491b 1c6e a0fd 8b46 cd9f ..;...I..n...F..
00000010: 32e5 92fc 2...
$ xxd test.hex
00000000: 6164 6338 3362 3139 6537 3933 3439 3162 adc83b19e793491b
00000010: 3163 3665 6130 6664 3862 3436 6364 3966 1c6ea0fd8b46cd9f
00000020: 3332 6535 3932 6663 0a 32e592fc.
0a
字节出现在 test.hex
但不出现在 test.bin
中的原因是什么?
注1:这是我一直在问自己的问题,按照那里使用的解决方案:
注释 2:我能够抑制 0a
字节,这不是问题,我只是好奇为什么它会出现在一种情况下但是不是另一个:
$ echo | sha1sum | awk '{print ;}' | head -c-1 > test_2.hex
$ xxd test_2.hex
00000000: 6164 6338 3362 3139 6537 3933 3439 3162 adc83b19e793491b
00000010: 3163 3665 6130 6664 3862 3436 6364 3966 1c6ea0fd8b46cd9f
00000020: 3332 6535 3932 6663 32e592fc
您看到的 0a
来自 awk
。默认情况下,awk
的 输出记录分隔符 是 \n
并且您可以通过设置 ORS
来远程它(例如使用 BEGIN {ORS=""}
).
由于 -r
参数,当您通过 xxd -r -ps
管道时,您会丢失它。来自手册页:"Additional Whitespace and line-breaks are allowed anywhere."
我对某些 bash 命令中发生的某些 0a
(即 NL
ASCII 字节)感到困惑。关于以下内容:
$ echo | sha1sum | awk '{print ;}' | xxd -r -ps > test.bin
$ echo | sha1sum | awk '{print ;}' > test.hex
$ xxd test.bin
00000000: adc8 3b19 e793 491b 1c6e a0fd 8b46 cd9f ..;...I..n...F..
00000010: 32e5 92fc 2...
$ xxd test.hex
00000000: 6164 6338 3362 3139 6537 3933 3439 3162 adc83b19e793491b
00000010: 3163 3665 6130 6664 3862 3436 6364 3966 1c6ea0fd8b46cd9f
00000020: 3332 6535 3932 6663 0a 32e592fc.
0a
字节出现在 test.hex
但不出现在 test.bin
中的原因是什么?
注1:这是我一直在问自己的问题,按照那里使用的解决方案:
注释 2:我能够抑制 0a
字节,这不是问题,我只是好奇为什么它会出现在一种情况下但是不是另一个:
$ echo | sha1sum | awk '{print ;}' | head -c-1 > test_2.hex
$ xxd test_2.hex
00000000: 6164 6338 3362 3139 6537 3933 3439 3162 adc83b19e793491b
00000010: 3163 3665 6130 6664 3862 3436 6364 3966 1c6ea0fd8b46cd9f
00000020: 3332 6535 3932 6663 32e592fc
您看到的 0a
来自 awk
。默认情况下,awk
的 输出记录分隔符 是 \n
并且您可以通过设置 ORS
来远程它(例如使用 BEGIN {ORS=""}
).
由于 -r
参数,当您通过 xxd -r -ps
管道时,您会丢失它。来自手册页:"Additional Whitespace and line-breaks are allowed anywhere."