sed: заменить часть текста в предыдущей строке, если совпадение найдено

Вы можете открыть zip-файл в сеансе Python, используя zf = zipfile.ZipFile(filename, 'r', allowZip64=True), и после открытия вы можете открыть для чтения любой файл внутри zip-архива, прочитать строки и т. д. из него, как если бы это был обычный файл..

0
16.11.2018, 11:09
3 ответа

Попробуйте

sed '/^create_test/ {N; /psfxxx/ s/^/#/}' file
#create_test -type hard -outer { 1.0000 } { \
    psfxxx_16_pi/psfop/deadline_north_re_0 }

#create_test -type hard -outer { 0.0000 } { \
    psfxxx_16_pi/psfop/deadline_south_re_1 }

create_test -type hard -outer { 1.0000 } { \
    vsfxxx_16_pi/psfop/deadline_north_re_0 }

create_test -type hard -outer { 0.0000 } { \
    vsfxxx_16_pi/psfop/deadline_south_re_1 }

При встрече с «create _test» добавляется следующая строка, а если она содержит «psfxxx», добавляется префикс «#».

2
28.01.2020, 02:31

Другой sedспособ:

$ sed -zE 's/create_test([^\n]*\n[^\n]*psfxxx_16_pi)/#create_test\1/g' file
#create_test -type hard -outer { 1.0000 } { \
    psfxxx_16_pi/psfop/deadline_north_re_0 }

#create_test -type hard -outer { 0.0000 } { \
    psfxxx_16_pi/psfop/deadline_south_re_1 
0
28.01.2020, 02:31

Если подойдет awk:

awk '/psfxxx_16_pi/{prev = "#" prev} {print prev} {prev = $0} END {print}'

Здесь я печатаю предыдущую строку (, сохраненную в prev), для каждой строки и сохраняю $0для следующей итерации в prev. Если строка совпадает, я добавляю #к prev. В конце выведите последнюю строку.

0
28.01.2020, 02:31

Теги

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