varios varias uso sólo start siguientes regulares que patrones palabras palabra mostrará líneas los las expresiones exacta ejemplos egrep cuál con comienzan comandos buscar bash shell awk

bash - varias - grep varios patrones



Líneas Grep para números mayores que el número dado (3)

Estoy tratando de grep para líneas en el primer campo de una salida que son mayores que un número dado. En este caso, ese número es 755 . En definitiva, lo que estoy haciendo es intentar listar cada archivo con privilegios mayores que (y no iguales a) 755 usando stat -c ''%a %n'' * y luego canalizar a grep''ing (o posiblemente sed''ing) ?) para obtener esta lista final. ¿Alguna idea de cómo se puede lograr esto mejor?


Ni grep ni sed son buenos en aritmética. awk podría ayudar (desafortunadamente no lo sé). Pero tenga en cuenta que find puede ser útil aquí también:

-perm mode File''s permission bits are exactly mode (octal or symbolic). Since an exact match is required, if you want to use this form for symbolic modes, you may have to specify a rather complex mode string. For example -perm g=w will only match files which have mode 0020 (that is, ones for which group write permission is the only permission set). It is more likely that you will want to use the `/'' or `-'' forms, for example -perm -g=w, which matches any file with group write permission. See the EXAMPLES section for some illustrative examples. -perm -mode All of the permission bits mode are set for the file. Symbolic modes are accepted in this form, and this is usually the way in which would want to use them. You must specify `u'', `g'' or `o'' if you use a symbolic mode. See the EXAMPLES section for some illustrative examples. -perm /mode Any of the permission bits mode are set for the file. Symbolic modes are accepted in this form. You must specify `u'', `g'' or `o'' if you use a symbolic mode. See the EXAMPLES section for some illustrative examples. If no permission bits in mode are set, this test matches any file (the idea here is to be consis‐ tent with the behaviour of -perm -000).

Entonces, ¿qué podría funcionar para usted?

find . -perm -755 -printf ''%m %p/n''

Simplemente elimine la pieza -printf si solo necesita nombres de archivo.


Yo usaría awk(1) :

stat -c ''%a %n'' * | awk ''$1 > 755''

El patrón awk coincide con las líneas donde el primer campo es mayor que 755. Puede agregar una acción si desea imprimir un subconjunto de una línea o algo diferente también (Ver la respuesta de @ Kent).


prueba esto:

stat -c ''%a %n'' *|awk ''$1>755''

si solo quiere el nombre del archivo en su salida final, omita los números de privilegio, podría:

stat -c ''%a %n'' *|awk ''$1>755{print $2}''

EDITAR

de hecho, podrías hacer el chmod dentro de awk. pero debe asegurarse de que el usuario ejecute la línea awk tiene permiso para cambiar esos archivos.

stat -c ''%a %n'' *|awk ''$1>755{system("chmod 755 "$2)}''

nuevamente, suponga que el nombre de archivo no tiene espacios.