![Utilidad estándar de Unix/Linux para probar cada línea de entrada](https://rvso.com/image/1558044/Utilidad%20est%C3%A1ndar%20de%20Unix%2FLinux%20para%20probar%20cada%20l%C3%ADnea%20de%20entrada.png)
Estoy escribiendo un script Bash que debería probar si cada línea de entrada cumple con cierta condición.
¿Hay alguna manera de tomar el predicado y reducir toda la línea a 0 o 1 para no tener que codificar el código de bucle yo mismo usando una utilidad que es habitualmente estándar o está disponible en distribuciones de Linux?
Respuesta1
Datos de muestra (queremos todas las líneas que contengan "desear"):
$ cat x
not this
want this
not that
want that
Podrías usarawk
:
- Imprime un
1
si la línea coincide con la expresión regular/want/
- Imprime un
0
si la línea no coincide
$ cat x | awk '{if(match($0,/want/)){print 1}else{print 0}}'
0
1
0
1
O tratarsed
:
- Reemplace las líneas que contienen solo
1
con0
(de lo contrario, pasarán como a1
) - Reemplace las líneas que contienen "desear" con un
1
- Reemplace las líneas que no sean a
1
con a0
$ cat x | sed -re 's/^1$/0/' -e 's/^.*want.*$/1/' -e 's/^[^1][^$].*$/0/'
0
1
0
1