RE: scrpt help neded...
-Original Message- From: owner-freebsd-questi...@freebsd.org [mailto:owner-freebsd-questi...@freebsd.org] On Behalf Of per...@pluto.rain.com Sent: Thursday, 21 July 2011 10:08 PM To: kl...@thought.org Cc: freebsd-questions@freebsd.org Subject: Re: scrpt help neded... Gary Kline kl...@thought.org wrote: I'm looking for a script that takes on arg and lets me vi/vim into the r esults. Let's say that I'm looking for the string 201107 in a slew of files. the script find it with grep---not grep -w, just grep. collect es the filenames and lines (grep -n) and saves then temporarily, then points vim or vi at each file+linenumbr and execs it for me. the fewer keystrokes, the better. To edit each file that contains 201107: $ vi ` grep -l 201107 {files to be searched} ` That won't pre-position within the files, but since it's a single invocation of vi, with each subsequent file being loaded by :n, a search pattern will persist (unless/until you replace it by entering a different search pattern). At the top of the first file, you enter /201107 to find the first instance, n to find the second, etc. After :n -- at the top of the second file -- n alone will find the first instance. OTOH if you want to bring up an xterm containing _the results of the grep_ you can pipe it into the attached script. There is no manpage, but the comments and the (straightforward) parameter decoding should provide a start. (There are a few magic numbers, which ideally should be tweaked for your X11 installation's font dimensions, but nothing horrible will happen if they are slightly off.) - get your grep script to return the line number of the item to be changed and then use vi -clinenumber filename this is preposition you on the line containing the grepped target. -- Murray Taylor Bytecraft Systems Special Projects Engineer |_|0|_|Absence of evidence |_|_|0|is not evidence of absence |0|0|0|Carl Sagan --- The information transmitted in this e-mail is for the exclusive use of the intended addressee and may contain confidential and/or privileged material. Any review, re-transmission, dissemination or other use of it, or the taking of any action in reliance upon this information by persons and/or entities other than the intended recipient is prohibited. If you received this in error, please inform the sender and/or addressee immediately and delete the material. E-mails may not be secure, may contain computer viruses and may be corrupted in transmission. Please carefully check this e-mail (and any attachment) accordingly. No warranties are given and no liability is accepted for any loss or damage caused by such matters. --- ### This e-mail message has been scanned for Viruses by Bytecraft ### ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org
scrpt help neded...
Y'all, Not sure where it was the calendar or something else that suddenly made my tying go South. maybe both. --oh, yes, i still need to buy a new clicky kybd. but that won't help with the script i need. back hen i worked from cray reseach in WI, a shell /bin/sh wizard cooked up what i wanted in minutes. i have lost in in the 20+ years so maybe some shell or perl guru can help me. I'm looking for a script that takes on arg and lets me vi/vim into the r esults. Let's say that I'm looking for the string 201107 in a slew of files. the script find it with grep---not grep -w, just grep. collect es the filenames and lines (grep -n) and saves then temporarily, then points vim or vi at each file+linenumbr and execs it for me. the fewer keystrokes, the better. can anybody help me? tia, gary -- Gary Kline kl...@thought.org http://www.thought.org Public Service Unix Journey Toward the Dawn, E-Book: http://www.thought.org The 8.51a release of Jottings: http://jottings.thought.org ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org
Re: scrpt help neded...
Gary Kline kl...@thought.org wrote: I'm looking for a script that takes on arg and lets me vi/vim into the r esults. Let's say that I'm looking for the string 201107 in a slew of files. the script find it with grep---not grep -w, just grep. collect es the filenames and lines (grep -n) and saves then temporarily, then points vim or vi at each file+linenumbr and execs it for me. the fewer keystrokes, the better. To edit each file that contains 201107: $ vi ` grep -l 201107 {files to be searched} ` That won't pre-position within the files, but since it's a single invocation of vi, with each subsequent file being loaded by :n, a search pattern will persist (unless/until you replace it by entering a different search pattern). At the top of the first file, you enter /201107 to find the first instance, n to find the second, etc. After :n -- at the top of the second file -- n alone will find the first instance. OTOH if you want to bring up an xterm containing _the results of the grep_ you can pipe it into the attached script. There is no manpage, but the comments and the (straightforward) parameter decoding should provide a start. (There are a few magic numbers, which ideally should be tweaked for your X11 installation's font dimensions, but nothing horrible will happen if they are slightly off.) #!/usr/local/bin/bash # The maxl and maxw calculations involve magic numbers, which ideally # ought to be extracted from xterm and window-manager settings rather # than being hard-coded. Good luck figuring out a way to do that. # # The xterm font is 6w x 13h # # visible title bar height incl top frame = 29 pixels # + xterm margin inside frame = 1 pixel # + bottom frame margin = 8 pixels (same as frame widths below) # + window-manager shadow = 1 pixel # = height available for text = screen height - 39 pixels # maxl=`(xwininfo -root | sed -n -e 's/ Height: //p' ; echo 39 - 13 / p) | dc` # # visible frame width = 7 pixels # + xterm margin inside frame = 1 pixel # * 2 sides = total width of side frames = 16 pixels # + window-manager shadow = 1 pixel # = width available for text = screen width - 17 pixels # maxw=`(xwininfo -root | sed -n -e 's/ Width: //p' ; echo 17 - 6 / p) | dc` # maxw should be used in conjunction with the max line length found in the # file to automatically set the width (as is already being done for the length). # Set defaults w=80 l=0 n=stdin flags= n_is_default=1 w_is_default=1 # Handle flag params while [[ $1 == -?* ]] ; do case $1 in -w ) shift w=$1 w_is_default=0 ;; -w* ) w=${1#-w} w_is_default=0 ;; -l ) shift l=$1 ;; -l* ) l=${1#-l} ;; -n ) shift n=$1 n_is_default=0 ;; -n* ) n=${1#-n} n_is_default=0 ;; * ) flags=$flags $1 esac shift done # Check for no params = stdin, or 1st param of - (explicit stdin), and # if so copy stdin to a file since there seems no way to get it passed to # the less which will be running in the xterm. Note that - will not # work as any but the first non-flag parameter. if [ x$1 == x -o $1 == - ] ; then cat /tmp/xless$$ shift if [ $l == 0 ] ; then l=`(head -$maxl /tmp/xless$$ | fold -w$w | wc -l ; echo \1 + d [$maxl p q] sa $maxl a p q\) | dc` fi xterm -geometry ${w}x$l +sb -sl 0 -title $n - `pwd` -n $n $flags -e sh -c less /tmp/xless$$ $* ; rm /tmp/xless$$ else [ $n_is_default == 1 ] n=`basename $1` if [[ $w_is_default == 1 $1 == *.w=* ]] ; then w=`echo $1 | sed -e 's/^.*\.w=//'` [ $n_is_default == 1 ] n=`echo $n | sed -e 's/\.w=.*$//'` fi if [ $l == 0 ] ; then l=`(head -$maxl $1 | fold -w$w | wc -l ; echo \1 + d [$maxl p q] sa $maxl a p q\) | dc` fi xterm -geometry ${w}x$l +sb -sl 0 -title $1 - `pwd` -n $n $flags -e less $* fi ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to freebsd-questions-unsubscr...@freebsd.org