Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Turn a single sed command into a reusable Textmate command

I have 7 lines of text:

a
b
c
d
e
f
g

Now I want to add characters to the end of each line, to end up with:

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

I found that I can use the "sed" command and run my selection through sed using "Filter through command" in Textmate

sed 's/$/,/'

Now, one question remains: how do I turn this into a Textmate command that takes input in some sort of way (so it knows what text to append)?

(My tries in doing this have proven unsuccessful)

like image 843
Wolfr Avatar asked May 02 '09 22:05

Wolfr


2 Answers

Pop this into a command within the Text bundle, it'll append whatever is in the clipboard to the end of all lines that have been selected:

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

It's currently limited to appending one line's worth of text, if the clipboard contains more than one line it will default to a comma at the end of the selected lines.

Edit:

To take this a little further, here's a version that provides a dialog box which prompts for the input of the string that will be appended to each line in the selection:

#!/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/"
like image 198
Greg Annandale Avatar answered Nov 07 '22 17:11

Greg Annandale


In Text menu there is already a command "Edit each line in selection" exactly do this. It will put cursor on first line and what you type there repeated on each line.

like image 2
nexneo Avatar answered Nov 07 '22 18:11

nexneo