Попробуйте режим абзаца awk:
$ awk -v RS= -v ORS='\n\n' '{gsub(/<[^>]+>?\n?/, "")}1' ip.txt
This is the first
block of text.
This is the second block.
do not delete this>
Third block here.
-v RS=
это приведет к использованию одной или нескольких последовательных пустых строк в качестве разделителя входных записей -v ORS='\n\n'
установить разделитель выходных записей в виде двух символов новой строки gsub(/<[^>]+>?\n?/, "")
удалить <
, за которыми следуют не >
символы, за которыми следуют необязательные >
и символы новой строки 1
идиоматический способ распечатать содержимое входной записи
То же самое сperl
perl -00 -lpe 'BEGIN{$\="\n\n"} s/<[^>]+>?\n?//g' ip.txt
Запустите это в оболочке (, потому что history
является встроенной оболочкой):
history -E 0 > history_log.txt
Затем запустите следующий скрипт:
cat history_log.txt | awk '{$1=$2=$3=""}1' | cut -c 4- | jq --raw-input --slurp 'split("\n")' > a_temp.json
cat history_log.txt |awk '{$1=""; print $2, $3}' | jq --raw-input --slurp 'split("\n")' > b_temp.json
jq 'map( { "command":. } )' a_temp.json > a.json
jq 'map( { "datetime":. } )' b_temp.json > b.json
jq -s 'transpose|map(add)' a.json b.json > output.json
В приведенном выше ответе используются awk и jq