Как я могу удалить весь текст между фигурными скобками в файле многострочного текста?

Запустите простой скрипт с cron каждые 5 минут. Ваш crontab мог посмотреть, например, как это:

*/5 * * * *  /path/to/your/script

Псевдокод сценария:

IF (lockfile exists) { exit }
create lockfile
IF (old job has not finished yet) { 
    remove lockfile
    exit
}
IF (new job has already been queued) {
    remove lockfile
    exit
}
schedule new task
remove lockfile

Видеть Корректные сценарии оболочки привязки? поскольку, как заблокировать правильно (как без состояний состязания как возможный).

10
13.04.2017, 15:36
3 ответа
$ sed ':again;$!N;$!b again; s/{[^}]*}//g' file
This is 
that wants
 anyway.

Объяснение:

  • : снова; $! N; $! b снова;

    Это читает целый файл в пространство образца.

    : снова маркировка. N читает в следующей строке. $! b снова ветви назад к снова маркировка при условии, что это не последняя строка.

  • с {[^}] *}//g

    Это удаляет все выражения в фигурных скобках.

На MAC OSX, попробуйте:

sed -e ':again' -e N -e '$!b again' -e 's/{[^}]*}//g' file

Вложенные Фигурные скобки

Позволяют нам взять это в качестве тестового файла с большим количеством вложенных фигурных скобок:

a{b{c}d}e
1{2
}3{
}
5

Вот модификация для обработки вложенных фигурных скобок:

$ sed ':again;$!N;$!b again; :b; s/{[^{}]*}//g; t b' file2
ae
13
5

Объяснение:

  • : снова; $! N; $! b снова

    Это совпадает с прежде: это читает в целом файле.

  • : b

    Это определяет маркировку b .

  • s/{[^ {}] *}//g

    , Это удаляет текст в фигурных скобках пока текст, не содержит внутренних фигурных скобок.

  • b

    т, Если вышеупомянутая команда замены привела к изменению, переходит назад к маркировке b . Таким образом команда замены повторяется, пока все группы фигурной скобки не удалены.

10
27.01.2020, 20:01

Perl:

perl -0777 -pe 's/{.*?}//sg' file

, Если вы хотите отредактировать оперативный

perl -0777 -i -pe 's/{.*?}//sg' file

, Который читает файл как единственную последовательность и делает расширенный поиск и замену.

Это обработает вложенный заключенный в фигурные скобки:

perl -ne 'do {$b++ if $_ eq "{"; print if $b==0; $b-- if $_ eq "}"} for split //'
4
27.01.2020, 20:01

Sed:

sed '/{/{:1;N;s/{.*}//;T1}' multiline.file

запустился начиная со строки с {, и получите следующую строку ( N), пока замена ( {} ) не может быть сделана ( возврат средств T для маркировки сделанный : , если замена не сделана)

Немного изменяют, чтобы быть верным, если многие, которых кюри, бракуемое в одной строке

sed ':1; s/{[^}]*}// ; /{/ { /}/!N ; b1 }' multiline.file

, Удаляет все символы в скобках ( [^}] равный каждый символ кроме правая скобка для создания sed не жадный), и если в строке остаются оставленным, браковали - назад для запуска со следующей строки, добавленной, если нет правая скобка .

4
27.01.2020, 20:01

Теги

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