tengo cadenas:
fvvDataFolders/DDB/DDB2018-02-21oM]
fbbDataFolders/DDB/DDB2018-02-22oM]
Quiero eliminar todo lo que comienza con Datos y termina en lo que parece una fecha:
DataFolders/DDB/DDB2018-02-21
DataFolders/DDC/DDB2018-02-22
¿Cómo puedo hacerlo?
Respuesta1
Cualquiera
grep -P -o 'Data.+?\d\d\d\d-\d\d-\d\d'
o
perl -pe 's/^.+(Data.+?\d\d\d\d-\d\d-\d\d).+$/$1/'
servirá. Ambos imprimen la cadena mínima que comienza Data
y termina en lo que parece una fecha (AAAA-MM-DD).
echo "fvvDataFolders/DDB/DDB2018-02-21oM]" > input.txt
echo "fbbDataFolders/DDB/DDB2018-02-22oM]" >> input.txt
grep -P -o 'Data.+?\d\d\d\d-\d\d-\d\d' input.txt
# output:
DataFolders/DDB/DDB2018-02-21
DataFolders/DDB/DDB2018-02-22
perl -pe 's/^.+(Data.+?\d\d\d\d-\d\d-\d\d).+$/$1/' input.txt
# output:
DataFolders/DDB/DDB2018-02-21
DataFolders/DDB/DDB2018-02-22
Respuesta2
Puedes usar el comando grep
de esta manera:
grep -oP 'Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}' input-file > output-file
-o
,--only-matching
- muestra solo la parte de una línea que coincide con el PATRÓN.-P
,--perl-regexp
- PATTERN es una expresión regular de Perl; o en este caso podría usarse también la opción-E
,--extended-regexp
- PATRÓN es una expresión regular extendida (ERE).- la expresión regular
'Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}'
coincide con sus requisitos. Comienza con la cadenaData
, seguida de un número desconocido*
de caracteres.
y termina con el formato de fecha: guión4 digits from 0 to 9
guión .2 digits from 0 to 9
2 digits from 0 to 9
Aquí también hay una sed
solución:
sed -r 's/^.*(Data.*[0-9]{4}-[0-9]{2}-[0-9]{2}).*$/\1/' /tmp/input-file
- redirija la salida a un nuevo archivo
> output-file
o use la opción-i.bak
para realizar los cambios en sus lugares y crear un archivo de respaldo. -r
,--regexp-extended
- utilice expresiones regulares extendidas en el script.- el comando
s
significa sustituir:/<string-or-regexp>/<replacement>/
. ^.*
coincidirá con el principio^
de la línea, seguido de un número desconocido de caracteres..*$
coincidirá con el final$
de la línea, precedido por un número desconocido de caracteres.- dentro de, el grupo de captura
(...)
será tratado como la variable \1. Entonces toda la línea^.*$
será sustituida por la parte que coincida con lo que está entre paréntesis.