sed или awk для печати между двумя шаблонами [исключая шаблоны]

Lo siguiente usa la prueba -ode bashpara probar si la opción de shell pipefailestá configurada o no (esto funciona en [[... ]]y con el comando testintegrado -, pero no con[... ]). Si la opción no está configurada, la configura e instala una trampa que la desactivará cuando la función regrese:

foo () {
    if [[ ! -o pipefail ]]; then
        set -o pipefail
        trap 'set +o pipefail' RETURN
    fi

    # rest of function body
}

Código con algo de depuración incluida:

foo () {
    if [[ ! -o pipefail ]]; then
        set -o pipefail
        trap 'set +o pipefail' RETURN
    fi

    # rest of function body
    if [[ -o pipefail ]]; then
        echo 'pipefail is set (in function)'
    else
        echo 'pipefail is not set (in function)'
    fi
}

if [[ -o pipefail ]]; then
    echo 'pipefail is set'
else
    echo 'pipefail is not set'
fi

foo

if [[ -o pipefail ]]; then
    echo 'pipefail is set'
else
    echo 'pipefail is not set'
fi

Ejecutarlo:

$ bash script.sh
pipefail is not set
pipefail is set (in function)
pipefail is not set

$ bash -o pipefail script.sh
pipefail is set
pipefail is set (in function)
pipefail is set
1
09.07.2019, 21:53
2 ответа

Вы можете удалить первую и последнюю строку с помощью

$ sed '1d;$d'

Итак, во входной файл просто включите текст, который вы показали. Если вам нужно найти часть между [start]и [end], сделайте это так:

$ sed -n '/start/,/end/p' $File | sed '1d;$d'
0
28.01.2020, 00:07

Удовлетворяет ли это вашим требованиям?

sed -n '/^[start]/,/[end]/p'

Эквивалентом вышесказанного является:

sed '/^[start]/,/[end]/!d'
0
28.01.2020, 00:07

Теги

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