ретрансляция даты может быть сложной, однако как насчет
cd /usr/share/doc
## less that 365 dyas
find . -mtime -365 -type f -name NEWS.gz
## since 1-1-2015
touch -t 201501010000 /tmp/ref
find . -newer /tmp/ref -type f -name NEWS.gz
, вы можете добавить "немного сложности"
touch -t $(date +%Y)01010000 /tmp/ref
Creo que desea agregar un prefijo inicial a su cadena de búsqueda. Si la palabra que intenta reemplazar siempre irá precedida de un espacio:
sed -i 's/ VGHIER_TSV_WB798\./ "VGHIER_TSV_WB798"./g'
De manera más genérica, puede usar la agrupación de expresiones regulares [[:space:]]
para cubrir casos de espacios iniciales o tabulaciones, etc. (consulte man isspace
para obtener una lista completa ).
sed -i 's/\([[:space:]]\)VGHIER_TSV_WB798\./\1"VGHIER_TSV_WB798"./g'
En ese caso, necesitábamos agregar una complejidad adicional al crear una agrupación de expresiones regulares usando los paréntesis escapados y usar una referencia inversa\1
para asegurarnos de no perder el carácter exacto al realizar el reemplazo. También hay una clase de expresiones regulares [[:punct:]]
para los caracteres de puntuación, en caso de que la palabra esté precedida a veces por uno de ellos. Consulte man isspace
para obtener una lista completa y detallada de lo que cubre cada clase de carácter regex.
Aquí hay una solución de ejemplo más compleja para cubrir el caso de posibles prefijos de puntuación:
sed -i 's/\([[:space:]]\|[[:punct:]]\)VGHIER_TSV_WB798\./\1"VGHIER_TSV_WB798"./g'
Esto hace uso de la directiva regex|
(escapada con una barra invertida parased
)para indicar una alternativa.
Finalmente, si la palabra siempre será el primer elemento de la línea, use la expresión regular ^
para requerir que:
sed -i 's/^VGHIER_TSV_WB798\./"VGHIER_TSV_WB798"./g'
Y sí, para cualquiera de los anteriores, podría haber "agrupado" y "retrocedido -referenciado" a su cadena:
sed -i 's/^\(VGHIER_TSV_WB798\)\./"\1"./g'
sed -i 's/\([[:space:]]\|[[:punct:]]\)\(VGHIER_TSV_WB798\)\./\1"\2"./g'
Si su sed
admite ERE, puede agregar el CB
como una parte opcional del patrón para que coincida. Esto reemplazaría a ambos:
sed -E 's/(CB)?VGHIER_etc/"\1VGHIER_etc"/g' test
O, si su sed
admite \<
y \>
para el inicio y el final de la palabra, use esos:
sed 's/\<VGHIER_etc\>/"VGHIER_etc"/g' test
Además, tiene un punto final .
en el patrón, coincidirá con cualquier carácter y se reemplazará como parte de la cadena. El punto en el reemplazo devolverá un punto literal. s/foo./"foo"./
cambia food
a"foo".