У меня есть строки в следующем формате:
ABC "123" (123)
Member
100
QWERTY
Parent
2
QWERTY
ABC "321" (12345)
Member
12
QWERTY
ABC "4321" (123456)
Member
12
QWERTY
и из этого формата нужно получить следующее:
ABC "123" (123)
Member:100:QWERTY
Parent:2:QWERTY
ABC "321" (12345)
Member:12:QWERTY
ABC "4321" (123456)
Member:12:QWERTY
то есть убрать разрыв строки до и после, если строка состоит только из цифры. Есть ли лучшее кросс-платформенное/POSIX-решение? Насколько я понимаю, чистый sh не может этого сделать. Есть только awk, sed?





perl в режиме глотка:
perl -0000 -pe 's/\n([0-9]+)\n/:\1:/g' input-file
С "чистой ш" это совсем несложно. Достаточно простого конечного автомата:
#!/bin/sh
nl='
'
state=0
while read -r line; do
case "$state$line" in
0*) state=1 out = "$line" ;;
1|1*[!0-9]*) out = "$out$nl$line" ;;
2*) state=1 out = "$out$line" ;;
*) state=2 out = "$out:$line:" ;;
esac
done
printf '%s\n' "$out"