alan@mq.com (Alan H. Mintz) (10/27/90)
(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 >
pfalstad@screen.Princeton.EDU (Paul John Falstad) (10/27/90)
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."