Я нашел решение своей проблемы:
Диск и раздел, на котором была установлена моя Arch Linux, были переименованы с nvme0 **на nvme1 **после установки дополнительного диска nvme на мой компьютер. Я исправил свою проблему, просто напрямую отредактировав файл fstab, расположенный в /etc, с помощью nano и вручную изменив 0 --> 1, чтобы последовательность загрузки действительно искала правильное расположение для моих разделов root, /home и SWAP.
Надеюсь, это поможет кому-нибудь, кто когда-нибудь столкнется с этой странной проблемой!
Попробуйте:
awk '
BEGIN{
srand()
letter = "abcdefghijklmnopqrstuvwxyz"
digit = "0123456789"
}
function find_in(set) {
if (index(set, c)) {
c = substr(set, int(rand() * length(set) + 1), 1)
return 1
}
}
$0 != "" {
c = substr($0, length)
if (find_in(letter) || find_in(digit)) sub(/.$/, c)
}
{print}'
Обратите внимание, что в большинстве awk
реализаций, если вы запустите эти команды дважды в одну и ту же секунду, вы получите тот же результат, что и начальное число для генератора псевдо-случайных чисел, основанное на текущем времени в секундах.
Символ замены является случайным, что означает, что он может совпадать с исходным. Если вы хотите исключить оригинал из списка возможных замен, вы можете изменить функцию find_in
на :
function find_in(set, n) {
if (n = index(set, c)) {
set = substr(set, 1, n - 1) substr(set, n + 1)
c = substr(set, int(rand() * length(set) + 1), 1)
return 1
}
}
Использование модуля perl String ::Random :
perl -MString::Random -pe '
BEGIN{$s = String::Random->new}
s{[a-z0-9]$}{$s->randpattern($& =~ /\d/ ? "n" : "c")}e
' file
Обратите внимание, что это не исключает того, что замещающий символ совпадает с исходным.Возможно, неэффективный и некрасивый способ исправить это может заключаться в том, чтобы просто «бросить кубик», пока не будет сгенерирован другой персонаж :
.perl -MString::Random -pe '
BEGIN{$s = String::Random->new}
s{[a-z0-9]$}{do {$c = $s->randpattern($& =~ /\d/ ? "n" : "c")} until $c ne $&; $c}e
' file
Чистый bash
метод:
printf -v s '%s' {a..z} {A..Z} {0..9}
while read x; do
n=${x:((-1))}
echo -n ${x%?}
p=${s#*$n}
echo ${s:(( (${#p}>=10) ? RANDOM*52/32768 : 52 + RANDOM*10/32768 )):1}
done < file
Метод GNUsed
с использованием командыe
value для запуска tr
и head
в /dev/urandom для генерации случайных символов:
sed 's/\(.*\)\(.\)$/\
printf \1 ; \
echo \2 | \
tr '[:alpha:][:digit:]' "$({ tr -dc '[:alpha:]' | head -c 52; \
tr -dc '[:digit:]' | head -c 10; \
} < \/dev\/urandom;)"/e' file
Выход (меняется в зависимости от запуска):
bob1237
pittsburgq
0091916
Примечание. :ни один из методов не проверяет, отличается ли случайно выбранный символ от предыдущего символа, но чаще всего это так.