Похоже, что ksh делает что-то другое с арифметическим расширением; чтобы обойти это, я бы явно использовал арифметическую подстановку, которая ведет себя должным образом как в AIX 6, так и в AIX 7:
...
if [[ ( $((f_count * sleep_interval % alarm_interval)) -eq 0 ) && $f_count -gt 0 ]]
...
Это должно приближаться к тому, что вам нужно:
<cvslog sed -n '/Working file/ { N; /\n=\+$/b; :a; N; /\n=\+$/!ba; p; }'
Вывод:
Working file: modifiedfile1.h
----------------------------------
revision 1.3
Fixed some bug
================
Working file: modifiedfile2.h
----------------------------------
revision 1.1
Added some feature
================
Вот то же самое sed
сценарий с комментариями:
/Working file/ {
N # append next line to pattern space
/\n=\+$/b # is it a file separator -> next file
:a
N # append next line to pattern space
/\n=\+$/!ba # isn't it a file separator -> read next line
p # otherwise print accumulated text
}
Если вы укажете awk
использовать строку разделителя файлов в качестве разделителя записей ( RS
), это станет довольно простым для определения разумных критериев выбора:
<cvslog awk 'NF>2' RS='\n=+\n' FS='\n' ORS='\n\n'
Вывод:
Working file: modifiedfile1.h
----------------------------------
revision 1.3
Fixed some bug
Working file: modifiedfile2.h
----------------------------------
revision 1.1
Added some feature
Просто для удовольствия:
csplit cvslog '/=\{16\}/1' '{*}'
wc -l xx* |
head -n-1 |
while read n f; do
if (( n > 2 )); then
cat $f
fi
done
Вывод:
Working file: modifiedfile1.h
----------------------------------
revision 1.3
Fixed some bug
================
Working file: modifiedfile2.h
----------------------------------
revision 1.1
Added some feature
================
sed '/Working file:/ N ; s/\n/PLACEHOLDER/' changelog.txt |
grep -v 'PLACEHOLDER===' |
sed 's/PLACEHOLDER/\n/
действительно может быть сокращен до:
$ sed '/Working file:/{N;/===/d}' changelog.txt
Working file: modifiedfile1.h
----------------------------------
revision 1.3
Fixed some bug
================
Working file: modifiedfile2.h
----------------------------------
revision 1.1
Added some feature
================
Working file: unmodifiedfile3.h
Рабочий файл:
и следующую строку, если она содержит ===
, а также последнюю строку, если она содержит Рабочий файл:
Спасибо @ ilkkachu за предложение. Если шаблон необходимо сопоставить в начале строки, используйте ^ Рабочий файл:
$ cat ip.txt
Working file: 123
================
Working file: f1
----------------------------------
revision 1.3
Fixed some bug
================
Working file: abc
================
Working file: file
----------------------------------
revision 1.1
Added some feature
================
Working file: xyz
$ sed '/Working file:/{N;/===/d}' ip.txt | sed '${/Working file:/d}'
Working file: f1
----------------------------------
revision 1.3
Fixed some bug
================
Working file: file
----------------------------------
revision 1.1
Added some feature
================