[ale] multi-file string swap

Jim Kinney jim.kinney at gmail.com
Tue Aug 4 17:27:17 EDT 2009


OK. Answering my own problem:

for line in $(grep -v "^127" <hosts | grep "^[0-9]" | awk
'{$2=tolower($2); if ($3)  print $2","$1":"$3","$1 }'); do old=$(echo
$line | cut -f1 -d":"); new=$(echo $line | cut -f2 -d":"); sed -i
"s/$old/$new/" ssh_hosts; done

This work like magic. A bit clunky (secondary cut to avoid tinkering
with $IFS is a kludge).

On Tue, Aug 4, 2009 at 5:09 PM, Jim Kinney<jim.kinney at gmail.com> wrote:
> OK. Last technique hunt for the day. really.
>
> 2 files, /etc/hosts and /home/foo/.ssh/known_hosts (that makes for
> long lines and different location delimeters)
>
> hosts has :
>
> ip name1 name2
>
> known_hosts has:
> name1,ip ssh-rsa <long string>
>
> I need to change name1 in known_hosts to name2 from /etc/hosts
>
> I'm looking at creating a string from each line in /etc/hosts as
> name1,ip and doing a sed substitution for name2,ip in known_hosts.
>
> A fun thing is not all hosts files have name2. Those I don't want to
> tinker with anywhere.
>
> So I have the following which outputs a space separated
> pattern/substitution set: (yay!)
>
> grep -v "^127" </etc/hosts | grep "^[0-9]" | awk '{$2=tolower($2); if
> ($3)  print $2","$1,$3","$1 }'
>
> Next step is to actually do the substitution. I tried adding more to
> the above line as:
>
> | awk '{ system(" sed -i \"s/$1/$2/\" known_hosts ") }'
>
> but no joy:
>
> sed: -e expression #1, char 0: no previous regular expression
>
> So I've poked and fiddled with the " and ' and added backslashes until
> it looks like perl code with no solution yet.
>
> So then I tried just echo'ing the strings thinking they will show up
> as positional parameters $1 and $2.
>
> | echo "$1 $2" gave nothing. I'm rather puzzled and expecting it's
> something simple yet subtle I'm missing.
>
> Ideas?
>
> --
> --
> James P. Kinney III
> Actively in pursuit of Life, Liberty and Happiness
>



-- 
-- 
James P. Kinney III
Actively in pursuit of Life, Liberty and Happiness



More information about the Ale mailing list