arc*_*ber 0 command-line bash sed text-processing
我有这个脚本:
PATTERN=xAB
dd if=/dev/zero count=1 bs=10 | sed "s/\x0/\${PATTERN}/g" > test_ab
hexdump -C test_ab
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
$ ./make_test
1+0 records in
1+0 records out
10 bytes copied, 0.000147938 s, 67.6 kB/s
00000000 24 7b 50 41 54 54 45 52 4e 7d 24 7b 50 41 54 54 |${PATTERN}${PATT|
00000010 45 52 4e 7d 24 7b 50 41 54 54 45 52 4e 7d 24 7b |ERN}${PATTERN}${|
00000020 50 41 54 54 45 52 4e 7d 24 7b 50 41 54 54 45 52 |PATTERN}${PATTER|
00000030 4e 7d 24 7b 50 41 54 54 45 52 4e 7d 24 7b 50 41 |N}${PATTERN}${PA|
00000040 54 54 45 52 4e 7d 24 7b 50 41 54 54 45 52 4e 7d |TTERN}${PATTERN}|
00000050 24 7b 50 41 54 54 45 52 4e 7d 24 7b 50 41 54 54 |${PATTERN}${PATT|
00000060 45 52 4e 7d |ERN}|
00000064
Run Code Online (Sandbox Code Playgroud)
我希望该文件填充 0xAB。
您的变量名为PATTERN1,但您使用${PATTERN} (缺少 1)来调用它。
您转义了$,因此您的变量不会被替换。
使用ANSI-C 引用( $\'...\') 将 直接赋值0xAB给变量。
$ PATTERN=$\'\\xAB\'\n$ dd if=/dev/zero count=1 bs=10 | sed "s/\\x0/${PATTERN}/g"\n1+0 records in\n1+0 records out\n10 bytes copied, 7,784e-05 s, 128 kB/s\n\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\nRun Code Online (Sandbox Code Playgroud)\n或者,更改您的引用:
\nPATTERN=xAB\ndd if=/dev/zero count=1 bs=10 | sed \'s/\\x0/\\\'"${PATTERN}"\'/g\'\nRun Code Online (Sandbox Code Playgroud)\n或者用第二个反斜杠转义反斜杠:
\nPATTERN=xAB\ndd if=/dev/zero count=1 bs=10 | sed "s/\\x0/\\\\${PATTERN}/g"\nRun Code Online (Sandbox Code Playgroud)\n