Thread View: comp.unix.shell
2 messages
2 total messages
Started by Alan H. Mintz
Fri, 26 Oct 1990 22:29
Stupid sed question
Author: Alan H. Mintz
Date: Fri, 26 Oct 1990 22:29
Date: Fri, 26 Oct 1990 22:29
44 lines
1548 bytes
1548 bytes
(Hmmm. Hard to tell if this is the right group nowadays :) I'm trying to write a script to edit the /etc/ttytype file under XENIX. The idea is to search the file for the line for a given port and alter the terminal type associated with it. The ttytype file consists of lines like: wy60ak ttya1 svt1210 ttya2 ansi ttya3 The separator between the fields is a tab character (\011, 0x09). So, ********************* : # Edit script tty='ttya1' ttytype='vt100n' line=`fgrep $tty /etc/ttytype` cat /etc/ttytype | sed "s/$line/$ttytype $tty/" >tempfile # This is a tab -----------^^^^^^ if [ $? -eq 0 ] then mv tempfile /etc/ttytype fi *********************** This works great, if the file does not contain another terminal that starts with ttya1 (like ttya10): ansi ttya1 ansi ttya10 In this case, sed barfs with "command" garbled. What am I missing here ? I understand that the problem has to do with sed matching more than one line, but why doesn't it just (incorrectly) screw up both lines ? -- < Alan H. Mintz | Voice +1 714 980 1034 > < Micro-Quick Systems, Inc. | FAX +1 714 944 3995 > < 10384 Hillside Road | uucp: ...!uunet!mq!alan > < Alta Loma, CA 91701 USA | Internet: alan@MQ.COM >
Re: Stupid sed question
Author: Paul John Falstad
Date: Sat, 27 Oct 1990 00:30
Date: Sat, 27 Oct 1990 00:30
54 lines
2289 bytes
2289 bytes
In article <118@mq.com> alan@mq.com (Alan H. Mintz) writes: >(Hmmm. Hard to tell if this is the right group nowadays :) > >I'm trying to write a script to edit the /etc/ttytype file under XENIX. The >idea is to search the file for the line for a given port and alter the >terminal type associated with it. The ttytype file consists of lines >like: > >wy60ak ttya1 >svt1210 ttya2 >ansi ttya3 > >The separator between the fields is a tab character (\011, 0x09). So, >tty='ttya1' >ttytype='vt100n' > >line=`fgrep $tty /etc/ttytype` >cat /etc/ttytype | sed "s/$line/$ttytype $tty/" >tempfile ># This is a tab -----------^^^^^^ >This works great, if the file does not contain another terminal that starts >with ttya1 (like ttya10): > >ansi ttya1 >ansi ttya10 > >In this case, sed barfs with "command" garbled. What am I missing here ? I When there are two terminals that contain the string ttya1, $line is being set to "ansi ttya1\nansi ttya10", since the output of fgrep has two lines. So sed sees this as its command: s/ansi ttya1 ansi ttya10/vt100n ttya1/ which is garbled, since the first line has no ending delimiter. Try something like this instead: line=`grep "[TAB]$tty$" /etc/ttytype` cat /etc/ttytype | sed "s/$line/$ttytype $tty/" >tempfile or better, replace both lines with: sed "/[TAB]$tty\$/s/.*[TAB]/$ttytype[TAB]/" /etc/ttytype >tempfile If you actually have more fields after the tty name, you may have to change the \$ to another tab. -- Paul Falstad, pfalstad@phoenix.princeton.edu PLink:HYPNOS GEnie:P.FALSTAD "Your attention please. Would the owner of the Baader-Meinhof shoulder-bag which has just exploded outside the terminal please pick up the white courtesy phone."
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads