Объясните, пожалуйста, сценарий sed

как насчет использования savelog ?

Он доступен в debian и RH и почти во всех других дистрибутивах Linux Я знаю. Это сценарий оболочки / bin / sh, поэтому он должен работать и на любом другом unix.

например. перед записью чего-либо в test.log запустите savelog -n -c 7 test.log . При этом будут сохранены 7 последних непустых версий test.log. По умолчанию он сжимает ротационные журналы (но это можно отключить с помощью -l ).

При необходимости вы можете проверить размер test.log и только savelog , если он превышает определенный размер.

2
21.02.2018, 00:46
2 ответа

1s/^$//p imprime la primera línea, si está vacía.

/./,/^$/coincide con líneas desde la primera línea no -vacía hasta la primera línea vacía encontrada. No es codicioso en el sentido de que un calificador de expresiones regulares:sedno puede mirar hacia adelante al archivo o retroceder, por lo que debe detenerse la primera vez que coincida el patrón final.

Después de la línea final, la búsqueda de la línea inicial comienza de nuevo, por lo que la siguiente línea no -vacía comienza nuevamente el rango. En efecto, el rango coincide con líneas contiguas que no están vacías, más la primera que sigue vacía.

Dado que el rango se usa como /./,/^$/!d, se eliminan todas las líneas que no coincidan. Esto incluye la primera línea si está vacía, razón por la cual la primera regla la imprime explícitamente.

Sin la regla 1s/^$//p, la primera línea se eliminaría si estuviera vacía, aunque en realidad no se "repita".

$ echo $'\nfoo' | sed '1s/^$//p;/./,/^$/!d'

foo
$ echo $'\nfoo' | sed '/./,/^$/!d'
foo
$

En su prueba, el rango /#/,/#/es un poco diferente ya que comienza y termina con el mismo patrón. Line #1coincide con el patrón inicial, (por lo que se imprimen las líneas vacías intermedias)Line #2coincide con el final, (las siguientes líneas vacías no son )y en Line #3, el rango comienza de nuevo.

En el otro, el patrón inicial es /#1/, pero eso solo se encuentra una vez en la entrada.

6
27.01.2020, 21:53

ilkkachu dio una gran respuesta, que cubría todos los aspectos de este comando, incluida la necesidad menos -que -obvia de la primera parte de la cadena sed; e incluyendo el hecho de que el "!" El carácter elimina las partes que NO coinciden, en la práctica, las líneas en blanco que se repiten.

Aún así, es una forma extraña de hacerlo, cuando hay opciones más fáciles, como más -s , o uniq disponibles.

0
27.01.2020, 21:53

Теги

Похожие вопросы