Заменить строку полным текстом второго файла [дубликат]

Единственный способ выйти из цикла — $status иметь значение success. Это связано с тем, что результатом присваивания будет истинное значение в начале цикла, и цикл будет бесконечным.

Ваш цикл:

while [ some test ]; echo 'something'; retries=$(( $retries + 1 )); do
    loop body
done

Вместо этого переместите echo и присваивание в цикл:

#!/bin/bash

MAX_RETRIES=5
retries=0
status="$1"

while [ "$retries" -le "$MAX_RETRIES" ]; do
    echo "$retries"
    retries=$(( retries + 1 ))
    sleep $(( 1^retries * 1))

    if [[ "$status" == "success" ]]; then
        echo "success"
        break;
    elif [[ "$status" == "pending" ]]; then
        echo "pending"
    else
        echo "I am else."
    fi

    echo "Retries in do $retries"
done

echo "done."

Или, с case .. esac:

#!/bin/bash

MAX_RETRIES=5
retries=0
status="$1"

while [ "$retries" -le "$MAX_RETRIES" ]; do
    echo "$retries"
    retries=$(( retries + 1 ))
    sleep $(( 1^retries * 1))

    case "$status" in
        success)
            echo "success"
            break ;;
        pending)
            echo "pending" ;;
    esac

    echo "Retries in do $retries"
done

echo "done."
0
16.04.2018, 13:24
2 ответа
sed -e '/^line 2$/{r file1.txt' -e 'd;}' file2.txt

Скрипт sed— это

/^line 2$/{
    r file1.txt
    d
}

Новая строка после имени файла file1.txtявляется обязательной, поэтому разделение ее на отдельные -eвыражения в командной строке делает ее, возможно, более читабельной, чем

sed '/^line 2$/{r file1.txt
d;}' file2.txt

Сценарий ищет строку с содержимым line 2. Когда это найдено, содержимое file1.txtнемедленно выводится, а исходная строка удаляется.

Использование sed -iсделает изменения в строке -вfile2.txt(нерекомендуемыми ).

3
28.01.2020, 02:23

Использование vi

Перейдите на линию, затем:

!!cat filename

Текущая строка заменена содержимым файла.

0
28.01.2020, 02:23

Теги

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