Создайте /dev/sda1 и /dev/sda2 точного размера

Я предполагаю, что вы хотите заменить все вхождения любого слова в вашем массиве arrсловом ANON.

Ваш код работает отлично, но вы перезаписываете выходной файл для каждой итерации цикла, а это означает, что в конечном файле будет заменено только последнее слово в массиве.

Также существует потенциальная проблема, если какое-либо из слов содержит символы, которые могут быть интерпретированы как символы регулярного выражения, например *и [.

Было бы безопаснее проводить точное сравнение строк для каждой замены. Вы можете сделать это с помощьюawk:

{
    while (offset = index($0, str))
        $0 = substr($0, 1, offset - 1) "ANON" substr($0, offset + length(str))
}
{ print }

Это заменит все вхождения значения strстрокой ANON, даже если strсодержит символы регулярного выражения.

Чтение строк из файла (с дополнительным бонусом, заключающимся в том, что второй столбец файла строк с разделителями табуляции -содержит строку для замены на):

BEGIN { FS = "\t" }
NR == FNR { str[$1] = $2; next }
{
    for (s in str) {
        sl = length(s)
        while (offset = index($0, s))
            $0 = substr($0, 1, offset - 1) str[s] substr($0, offset + sl)
    }
}
{ print }

Учитывая вкладку -строки с разделителями stringsкак

*password*    *redacted*
My Name       Not really my name

... и текстовый файл file.txtкак

Password for the account belonging to My Name: *password*

... код awk выдаст

Password for the account belonging to Not really my name: *redacted*

при запуске как

awk -f script.awk strings file.txt
1
16.12.2019, 17:49
2 ответа

Я вижу, как сбивают с толку инструкции; вам нужно ввести

+20G

в подсказке, а не +size....

3
27.01.2020, 23:22

В примере, который вы публикуете, синтаксис размера неверен, вы должны опустить слово «размер», размер, который вы должны ввести, это :+20G

0
27.01.2020, 23:22

Теги

Похожие вопросы