sábado, 26 de marzo de 2016

LINUX-lab ejercicios nivel intermedio con vi

El comando vi es  un editor con muchas funciones y capacidades, siendo una de las herramientas más utilizadas por los usuarios y sysadmin en cualquier distro linux. Debido a que es imposible abordar todas en un sólo articulo, concentraremos la atención en los usos que pueden darse con mayor frecuencia.

En las siguientes experiencias de lab vamos a utilizar el comando vi para modificar archivos, no para crearlo. Esto porque el modo de edición de texto es lo más utilizado.

Tabla resúmen de features

http://www.yolinux.com/TUTORIALS/LinuxTutorialAdvanced_vi.html

Características más utilizadas de vi

- indentación.
- patrones de búsqueda dentro del texto
- substitución de texto.



Algunos tips simples/útiles

mostrar/Ocultar el número de línea

Esta función se ejecuta con los siguientes comandos:
:set nu
: set nonu

[gcepeda@santorini ~]$ vi /etc/hosts
texto original
127.0.0.1       localhost
127.0.1.1       santorini

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

: set nu

resultado:
  1 127.0.0.1       localhost
  2 127.0.1.1       santorini
  3 
  4 # The following lines are desirable for IPv6 capable hosts
  5 ::1     ip6-localhost ip6-loopback
  6 fe00::0 ip6-localnet
  7 ff00::0 ip6-mcastprefix
  8 ff02::1 ip6-allnodes
  9 ff02::2 ip6-allrouters

patrones de búsqueda dentro del texto

Para utilizar correctamente la función de busqueda/sustitución dentro del archivo de texto, se debe tener presente la siguiente estructra:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
Donde
:[range]s[ubstitute]
el rango casi siempre toma el valor "%" ya que indica "buscar el patrón en todas las líneas del texto"

/{pattern}
Es el patrón a buscar

/{string}
es lo que se requiere poner en lugar del patrón de búsqueda.

/[flags] [count]
Los flags pueden ser:
[c] Confirm each substitution / solicita confirmación en cada coincidencia.
[g] Replace all occurrences in the line / reemplaza todas las coincidencia encontradas a lo largo del archivo.
[i] Ignore case for the pattern / ignora MAYUS/minus.

Substituir un texto por otro en todo el archivo.

En el siguiente ejemplo, el requerimiento es buscar en todas las líneas del archivo, todas las coincidencias y reemplazarlas.
El comando a ejecutar es de la siguiente forma:
:%s/old-text/new-text/g
[root@localhost ~]# vi CHANGELOG.txt
LogicalDOC 7.2 (2015-03-20; logicaldoc-7.2)
==============================================================
:%s/LogicalDOC/MAgicalDOC/g

Resultado:
MAgicalDOC 7.2 (2015-03-20; logicaldoc-7.2)
==============================================================

En el ejemplo anterior, el comando ingresado considera las mayusc/minusc, por lo que no se reemplazó en todas las veces donde se encontró la palabra "logicaldoc". 
Si es requerido ignorar las mayusc/minusc, se debe agregar el param "i" en los flags, de la siguiente forma:

[root@localhost ~]# vi CHANGELOG.txt
MAgicalDOC 7.2 (2015-03-20; logicaldoc-7.2)
==============================================================
:%s/LogiCalDOc/magicaldoc/gi

Resultado
MAgicalDOC 7.2 (2015-03-20; magicaldoc-7.2)
==============================================================


Substituir el texto en la línea actual 

se utiliza el parametro de rango sin incluir "%"

[root@localhost ~]# vi CHANGELOG.txt
MAgicalDOC 7.2.1 (2015-05-05; magicaldoc-7.2.1)
==============================================================
:s/magicaldoc/laladoc/gi

resultado

laladoc 7.2 (2015-03-20; laladoc-7.2)
==============================================================

Substituir el texto en determinadas líneas. 

Para este caso el rango es expresado indicando la cantidad de línes.
:1,10s como ejemplo diciendo para las primeras tres líneas del archivo.

[root@localhost ~]# vi CHANGELOG.txt
MAgicalDOC 7.2.1 (2015-05-05; magicaldoc-7.2.1)
==============================================================
:1,3s/magicaldoc/laladoc/gi

Substituir el texto desde la posición actual a las siguientes líneas. 

dentro de los flags, incluir el conteo de líneas siguientes a la línea donde se encuentra ubicado el cursor actualmente, 

[root@localhost ~]# vi CHANGELOG.txt
MAgicalDOC 7.2.1 (2015-05-05; magicaldoc-7.2.1)
==============================================================
:s/magicaldoc/laladoc/gi 3

El comando indica, que se reemplaza el patrón de búsqueda desde la línea donde se encuentra el cursor ubicado y las siguientes 3 líneas.

Substituir una palabra y no los caracteres que lo contengan. 

Cuando se busca por un patrón, es posible que el string de búsqueda se encuentre dentro palabras más grandes. Si lo que se requiere es reemplazar una palabra, y no todas las palabras que contengan un juego de caracteres, se debe encerrar la palabra en  "<>"


[root@localhost ~]# vi CHANGELOG.txt

MAgicalDOC 7.2.1 (2015-05-05; magicaldoc-7.2.1)
==============================================================
:%s/\/laladoc/gi 

De esta forma, busca sólo la palabra aislada "magicaldoc".
Se debe anteceder al caracter con la tecla de escape \< y \>

Substituir varias palabras por otra.

Se puede buscar por una o varias palabras para ser sustituidas por otra.
se debe formatear el patrón de busqueda de la siguiente forma:
(palabra1|palabra2)

Observar el siguiente ejemplo

MAgicalDOC 7.2 (2015-03-20; logicaldoc-7.2)
==============================================================
:s/\(magicaldoc\|logicaldoc\)/laladoc/gi


Resultado:
laladoc 7.4 (2015-11-25; laladoc-7.4)
==============================================================

NOTA: siempre es requerido anteponer el caracter de escale "\" para los siguientes símbolos "<,>,|,(,)"
Omitirlo puede inducir a errores en el patrón de búsqueda.


Substituir todo el texto desde minúscula a Mayúscula y visceversa

Para Reemplazar todo el texto a minusculas, se utiliza el flag "L&" de la siguiente forma:

[root@localhost ~]# vi CHANGELOG.txt
MAgicalDOC 7.4 (2015-11-25; logicaldoc-7.4)
==============================================================
590 - Easy the creation of folder - Improvement - User Interface
592 - Correctly handle non-latin chars when sending emails - Bug - Core
606 - Deleting individual files via webdav dont go to trash - Bug - WebDAV
:%s/.*/\L&/

Resultado
magicaldoc 7.4 (2015-11-25; logicaldoc-7.4)
==============================================================
590 - easy the creation of folder - improvement - user interface
592 - correctly handle non-latin chars when sending emails - bug - core

606 - deleting individual files via webdav dont go to trash - bug - webdav

Para Reemplazar todo el texto a Mayúsculas, se utiliza el flag "U&" de la siguiente forma:
[root@localhost ~]# vi CHANGELOG.txt
magicaldoc 7.4 (2015-11-25; logicaldoc-7.4)
==============================================================
590 - easy the creation of folder - improvement - user interface
592 - correctly handle non-latin chars when sending emails - bug - core
606 - deleting individual files via webdav dont go to trash - bug - webdav
:%s/.*/\U&/

Resultado
MAGICALDOC 7.4 (2015-11-25; LOGICALDOC-7.4)
==============================================================
590 - EASY THE CREATION OF FOLDER - IMPROVEMENT - USER INTERFACE
592 - CORRECTLY HANDLE NON-LATIN CHARS WHEN SENDING EMAILS - BUG - CORE
606 - DELETING INDIVIDUAL FILES VIA WEBDAV DONT GO TO TRASH - BUG - WEBDAV

Para reemplazar sólo la primera letra de cada palabra, se utiliza el flag de la siguiente forma

[root@localhost ~]# vi install.txt
installation procedure:
1) Open a console
2) Type the command: java -jar Magicaldoc-installer.jar
3) Follow the installation steps
:%s/\<\(\w\)\(\w*\)\>/\u\1\L\2/g


Resultado
Installation Procedure:
1) Open A Console
2) Type The Command: Java -Jar Magicaldoc-Installer.Jar
3) Follow The Installation Steps


Fuentes:

http://www.ibm.com/developerworks/aix/library/au-vitips.html
http://www.thegeekstuff.com/2009/04/vi-vim-editor-search-and-replace-examples/
http://www.yolinux.com/TUTORIALS/LinuxTutorialAdvanced_vi.html
http://www.lefred.be/node/75

No hay comentarios:

Publicar un comentario