2009-05-02 14 views
5

Ho 7 righe di testo:trasformare in un singolo comando sed in un comando riutilizzabile TextMate

a 
b 
c 
d 
e 
f 
g 

Ora voglio aggiungere caratteri alla fine di ogni riga, per finire con:

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

ho trovato che posso usare il comando "sed" ed eseguire mia selezione attraverso sed usando "filtro tramite comando" in TextMate

sed 's/$/,/' 

No w, rimane una domanda: come faccio a trasformarlo in un comando Textmate che accetta l'input in qualche modo (quindi sa quale testo aggiungere)?

(I miei tentativi in ​​questo modo hanno dimostrato senza successo)

risposta

3

Pop questo in un comando all'interno del fascio di testo, sarà accodare tutto ciò che è negli appunti alla fine di tutte le linee che sono state selezionate:

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

E 'attualmente limitata a aggiungendo valore di uno di linea di testo, se gli appunti contengono più di una riga, per impostazione predefinita sarà una virgola alla fine delle righe selezionate.

Edit:

prendere questo un po 'oltre, ecco una versione che fornisce una finestra di dialogo che richiede l'immissione della stringa che verrà aggiunto ad ogni linea nella selezione:

#!/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

In Testo menu c'è già un comando "Modificare ogni riga nella scelta" esattamente fare questo. Metterà il cursore sulla prima riga e ciò che digiterà lì ripetuto su ogni riga.

+0

Lo so; ma non sembra in grado di anteporre. Se metto il cursore all'inizio della linea, premi la scorciatoia, poi salta alla fine. Potrei usare le selezioni di colonna ma poi sto usando di nuovo il mouse, che non è abbastanza veloce. La selezione della colonna – Wolfr

+2

non ha bisogno del mouse. usa la pagina su + lo spostamento e premi l'opzione quando hai finito. Non so di sed. ma nel textmate puoi scrivere il comando bundle molto facilmente che sostituisce la selezione con il testo processato sed se conosci sed/ruby ​​/ regex + ruby ​​etc. – nexneo

2

Creare un nuovo comando nell'editor fascio

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

Sulla discesa di ingresso selezionare testo selezionato o Niente
Sull'uscita selezionare sostituire il testo esistente

Ho appena testato e funziona bene.
Puoi anche scegliere una scorciatoia da tastiera per renderla più efficiente.

2

Se siete disposti a evitare il percorso di comando e semplicemente utilizzare il Trova/Sostituisci dialogo semplicemente fare come segue:

  • luce/selezionare le linee che si vorrebbe aggiungere a
  • aprire il Trova finestra
  • controllo 'Espressioni regolari'
  • nel campo 'Trova', aggiungere '$' (per indicare la fine della linea)
  • nel campo 'Sostituisci', aggiungere ',' (quello che si vogliono allegato)
  • tenere Option, questo cambierà "Sostituisci tutto" a "In Selezione"

Questa tecnica può essere applicata in molti altri modi utili. Ad esempio, modificando '$' a '^' se si desidera aggiungere un prefisso a ciascuna riga.

Problemi correlati