2009-05-02 14 views
5

tengo 7 líneas de texto:Girar un solo comando sed en un comando reutilizable Textmate

a 
b 
c 
d 
e 
f 
g 

Ahora quiero añadir caracteres al final de cada línea, para terminar con:

a, 
b, 
c, 
d, 
e, 
f, 
g, 

he encontrado que puedo usar el comando "sed" y ejecutar mi selección a través de sed usando "Se filtra a través de comandos" en Textmate

sed 's/$/,/' 

n w, queda una pregunta: ¿cómo convierto esto en un comando de Textmate que toma la entrada de alguna manera (para que sepa qué texto adjuntar)?

(Mis intentos de hacer esto han resultado infructuosos)

Respuesta

3

pop esto en un comando dentro del haz de texto, que va a anexar lo que está en el portapapeles hasta el final de todas las líneas que se han seleccionado:

#!/bin/bash 
if [[ $(pbpaste|wc -l) -eq 0 ]] 
    then r=`pbpaste` 
    sed 's/$/'$r'/' 
    else sed 's/$/,/' 
fi 

Se limita actualmente a anexar el valor de una línea de texto, si el portapapeles contiene más de una línea, tendrá una coma predeterminada al final de las líneas seleccionadas.

Editar:

Para llevar esto un poco más lejos, aquí está una versión que proporciona un cuadro de diálogo que pide la entrada de la cadena que se añadirá a cada línea en la selección:

#!/bin/bash 
r=$(CocoaDialog inputbox --title "String to be appended to EOL" \ 
    --informative-text "Enter string:" \ 
    --button1 "Okay" --button2 "Cancel") 

[[ $(head -n1 <<<"$r") == "2" ]] && exit_discard 

r=$(tail -n1 <<<"$r") 

sed "s/$/$r/" 
2

En texto menú ya hay un comando "Editar cada línea en la selección" exactamente hacer esto. Colocará el cursor en la primera línea y lo que escriba allí se repetirá en cada línea.

+0

Lo sé; pero no parece ser capaz de anteponer. Si coloco el cursor al comienzo de la línea, presiona el atajo, luego salta hasta el final. Podría usar las selecciones de columna, pero luego volveré a usar el mouse, que no es lo suficientemente rápido. – Wolfr

+2

selección de columna no necesita el mouse. use la página arriba + shift y presione la opción cuando termine. No sé sobre sed. pero en el compañero de texto puede escribir el comando paquete muy fácilmente que reemplaza la selección con texto procesado sed si conoce sed/ruby ​​/ regex + ruby, etc. – nexneo

2

Crear un nuevo comando en el editor de paquete

#!/bin/bash 
sed 's/$/,/' 

En el menú desplegable de selección de entrada texto seleccionado o Nada
En la salida seleccionar reemplazar el texto existente

Acabo de prueba y funciona bien
También puede elegir un atajo de teclado para hacerlo más eficiente.

2

Si usted está dispuesto a evitar la ruta de comando y simplemente utilizar el Buscar/Reemplazar de diálogo simplemente hacer de la siguiente manera:

  • destacado/seleccionar las líneas que le gustaría añadir a
  • abrir el Encuentra diálogo
  • de verificación '' expresiones regulares
  • en el campo 'Buscar', añade '$' (para indicar el final de la línea)
  • en el campo 'Reemplazar', añadir ',' (lo que queremos adjunta)
  • sostienen Option, esto va a cambiar "Reemplazar todo" a "en la selección"

Esta técnica se puede aplicar en una serie de otras formas útiles. Por ejemplo, cambiando '$' a '^' si desea agregar un prefijo a cada línea.

Cuestiones relacionadas