Мой /boot/loader/entries/arch.conf
должен был быть
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options initrd=initramfs-linux.img root=PARTUUID={/dev/sda2 uuid} rw
(заменить {/dev/sda2 uuid}
на фактический UUID)
^@
- это то, как часто представляется числовое значение0
)байта NUL (, например.
$ printf "null\000byte\n" > nullbyte
$ cat -A nullbyte
null^@byte$
Одна из проблем, связанных с этим, заключается в том, что вы не можете передать его буквально в командной строке. Это просто невозможно, так как один и тот же байт используется для завершения аргументов командной строки. Вместо этого вам придется каким-то образом избежать (, а \^@
не сработает.)
Регулярные выражения, поддерживаемые GNU grep в моей системе, похоже, не позволяют справиться с этим. С другой стороны, GNU sed, похоже, понимает \x00
, так что это работает, чтобы удалить его:
$ sed -e 's/\x00//g' nullbyte |cat -A
nullbyte$
tr
тоже должен работать, но не имеет-i
:
$ tr -d '\000' < nullbyte | cat -A
nullbyte$
^@
обычно является представлением символа NUL (байтового значения 0 ).
Многие текстовые утилиты, не относящиеся к -GNU, не могут с этим справиться, поскольку они не предназначены для поиска в тексте.
Некоторые версии GNU grep
могли найти его с помощью:
grep -P '\0'
GNU sed
может удалить его с помощью sed 's/\x0//g'
, поэтому:
grep -rlZP '\0'. | xargs -r0 sed -i 's/\x0//g'
Если ваш grep
не найдет их, попробуйте GNUawk
:
find. -type f -exec gawk -vORS='\0' '
/\0/{print FILENAME; nextfile}' {} + |
xargs -r0 sed -i 's/\x0//g'