найти все файлы, содержащие все указанные слова [дубликат]

Solución con awkal final.

Uso de GNUsed(que admite salir del script sedcon un estado de salida explícito):

find. -type f -size +0c -exec sed -n '1{/^[^[:blank:]]/q 1};q' {} ';' -print

El -size +0cgarantiza que los archivos que están completamente vacíos no se informen.

Si el directorio actual contiene los dos archivos de la pregunta y un archivo adicional c.txtcon una primera línea vacía, esto genera

./b.txt
./c.txt

El script GNU sed:

1{
    /^[^[:blank:]]/q 1
}
q

Para la línea 1, comprueba si el primer carácter de la línea no es -un espacio en blanco (ni un tabulador )y, si lo es, sale con el estado de salida 1(q 1). De lo contrario sale con estado de salida cero (el últimoq).

Una primera línea vacía no coincidirá con /^[^[:blank:]]/, por lo que ese caso se maneja correctamente.

Si sedsale con un estado de salida cero, -printhará que la ruta del archivo se imprima en la salida estándar mediante find.


Lo equivalente, pero usandoawk(cualquier awkservirá):

find. -type f -size +0c -exec awk '/^[^[:blank:]]/ { e=1 } { exit e }' {} ';' -print
17
13.04.2017, 15:36
0 ответов

Теги

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