Просто для завершения, мы можем сделать это также с sed
более загадочно:
sed -n '/[-0-9]\{10\}:/{x;/this/p;d};H;${x;/this/p}' <file>
или короче:
sed -n '/[-0-9]\{10\}:/ba;H;$!b;:a;x;/this/p' <file>
Чтобы понять это, вам нужно знатьу этого sed
есть два воспоминания.В шаблонном пространстве вы выполняете все операции, а удерживающее пространство - это долговременная память.Идея состоит в том, чтобы создать запись в поле для хранения , добавив каждую строку с H
.Однако, если строка файла (т. Е. пробел ) содержит дату, проверьте, что находится в пробел , и распечатайте при необходимости.Замена обоих пробелов производится с помощью x
.
Шаг за шагом:
sed -n ' # -n suppress automatic printing of pattern space
/[-0-9]\{10\}:/ba; # did we find a date? if so goto label 'a'
H; # append the line to the hold space
$!b; # did we reach EOF? if not, go to the beginning
:a; # create label 'a'
x;/this/p # you found a date or hit the EOF
# swap the patterns with 'x'
# check if it contains /this/
# if so print
' <file>