Попробуйте это с GNU sed:
sed -n '/^<tr>/p' file
или
sed '/^<tr>/!d' file
Puede canalizar su comando en el siguiente script awk.
$ rsync -avcn local/ remote/ | awk 'BEGIN {prev="./"} substr($0, 0, (length(prev))) != prev {print $0; prev = $0}'
file1
aaa/
bbb/
{prev="./"}
:antes de comenzar a leer la entrada, establezca la variable prev
en ./
(, que es la primera línea de la salida ). A partir de aquí, usaremos esta variable para almacenar el contenido de la línea anterior. substr($0, 0, (length(prev)))
:extrae un substr
ing de toda la línea $0
, comenzando en el primer carácter 0
, y con una longitud tan larga como la línea anterior (length(prev))
. != prev
:compara la subcadena de la línea actual con la línea anterior. Esencialmente, esto prueba si la línea actual (, la subcadena )comienza con la cadena de la línea anterior. No usamos una expresión regular simple aquí (anclada al comienzo de la línea ), porque tendríamos que escapar de ella. {print $0; prev = $0}
:si la línea actual comienza con la línea anterior, ignórela (, es decir, no la imprima ), si no coincide , entonces es un directorio nuevo, así que imprima toda la línea print $0
y almacene la nueva línea en la variable prev
prev = $0
. Su mejor apuesta, creo, es usar find <dir> -maxdepth 1 -type d
contra los 2 directorios, luego compare los resultados ordenados. De manera similar a la solución de Paul T pero con un límite de profundidad y teniendo en cuenta solo los directorios:
$ cd <local_folder>; find. -type d -maxdepth 1 | sort > ~/local-list.txt
$ cd <remote_folder>; find. -type d -maxdepth 1 | sort > ~/remote-list.txt
$ diff -u ~/remote-list.txt ~/local-list.txt