В Bash символ `*` больше не раскрывается перед передачей в команду? [дубликат]

En serio, esa expresión regular es ridícula.

En su lugar, escriba las cadenas, una por línea, en un archivo de texto simple y use

grep -v -w -F -f patternfile inputfile >outputfile

Esto solo generará líneas de inputfileque no contengan las cadenas enumeradas en patternfile. El indicador -Fhará que greptrate las cadenas como cadenas y no como expresiones regulares (, esto probablemente también hará que use menos memoria ). El indicador -wle asegura que coincidirá con palabras completas y no con subcadenas de palabras (, es decir, NA21130solo coincidirá con NA21130y no con GNA21130oNA211301).

Si desea buscar específicamente la cadena en la columna 5:

awk 'NR == FNR { pattern[$0] = 1; next } !pattern[$5]' patternfile inputfile >outputfile

Esto primero leerá las cadenas de patternfileen una matriz, indexada por las cadenas. Luego leerá inputfiley probará si el valor en la columna 5 es un índice en la matriz. Si no es así, se pasa la línea.


También tenga en cuenta que en un sistema POSIX, se garantiza que la longitud combinada máxima permitida de una línea de comando y el entorno actual (todas las variables de entorno y sus valores )es de al menos 4 KB. En la mayoría de los sistemas es más o mucho más que esto, pero debe estar preparado para recibir el mensaje de error Argument list too longcuando intente ejecutar comandos como la línea de comando de 16 KB en la pregunta.

21
11.11.2012, 22:36
0 ответов

Теги

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