Un par de enfoques extraños:
Almacena la línea más reciente que comienza con un dígito, agrégala si la línea actual no comienza con un dígito
awk '
/^[[:digit:]]/ {if (prev) print prev; prev=$0; next}
{prev = prev $0}
END {if (prev) print prev}
' file
Invierta el archivo. Si una línea comienza con un dígito que no sea -, lea la línea siguiente y agregue la línea anterior. Invertir los resultados. Supongo que un registro se divide como máximo 1 vez
tac file | awk '/^[^[:digit:]]/ {this = $0; getline; $0 = $0 this} 1' | tac
Основываясь на вашем примере с awk, я думаю, что решение, которое вам нужно, это:
sed -ne "s/[[:blank:]]*$(hostname)$//p" /etc/hosts
$ hostname
foo.example.com
$ grep $(hostname) /etc/hosts
10.16.161.131 foo.example.com
$ sed -ne "s/[[:blank:]]*$(hostname)$//p" /etc/hosts
10.16.161.131
Между прочим, всякий раз, когда вы пишете список команд, который включает grep
, переданный в awk
, их часто можно комбинировать:
$ awk "/$(hostname)/"'{print $1}' /etc/hosts
10.16.161.131