哪个命令更适合删除十六进制转储文件中的空白行,将零件粘合在一起?
sed -i '/^$/d' file.log
sed -i '/^\s*$/d' file.log
或者也许awk
?
801c3fb0: 0000 2821 0c18 9741 2406 0020 afb0 0010 | ..(!...A$.. ....
801c3fc0: 2402 0014 afa2 0038 8e22 00e4 2404 0064 | $......8."..$..d
801c3fd0: 0000 2821 03a0 3021 0040 f809 27a7 0038 | ..(!..0!.@..'..8
801c3fe0: 1040 001d 0040 9021 2630 0008 0200 2021 | .@...@.!&0.... !
801c3ff0: 0c0a 8935 2405 0002 5040 0064 0000 1021 | [email protected]...!
801c4000: 0200 2021 0c0a 8935 2405 0002 0200 2021 | .. !...5$..... !
801c4010: 0040 2821 2406 0002 3c07 8074 0c0a 86a5 | .@(!$...<..t....
801c4020: 24e7 10fc 0040 2021 3c05 8074 0c1b 634c | $....@ !<..t..cL
您的第二个
sed
解决方案几乎在所有情况下都可以正常工作,但这里有一些其他解决方案,只是因为:第二行是一个完全空的行,第 4 行有一个空格,第 6 行有一个制表符
sed '/^$/d' file.log
如上所示,这不会删除包含空格的行
sed '/^\s*$/d' file.log
注意:上述解决方案似乎不适用于 BSD sed
sed '/^[[:space:]]*$/d' file.log
该解决方案应该适用于 GNU 和 BSD sed
awk 'NF' file.log
这不会就地修改,但如果你有 GNU awk,你可以使用以下
grep -v '^$' file.log
如上所示,这不会删除包含空格的行。此外,这不会修改文件
grep . file.log
如上所示,这不会删除包含空格的行。此外,这不会修改文件
grep -v '^\s*$' file.log
这不会修改文件,但可以使用重定向来创建具有所需内容的新文件
tr -s '\n' <file.log
如上所示,这不会删除包含空格的行。此外,这不会修改文件
perl -n -e "print if /\S/" file.log
要就地修改,请使用以下命令:
这两个命令之间的唯一区别
sed
是第二个命令占空行中的空格或制表符。您的文件似乎在空白行中有空格/制表符,这就是第一个
sed
命令没有删除它们的原因。使用第二个
sed
命令。我已经测试并确认它适用于您的文件。