|
|
|
|
||||||
| comp.unix.shell Using and programming the Unix shell. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
Hi Guys,
Wonder if you can , this problem is getting me down. My script is falling over with a sed problem. NEWSTORE=JvHCdEMzDegPI NPASS=EoWH/Q4hds7nA sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp The above sed command works fine when there are no "special characters" but when they appear as above i get a sed: command garbled: error. Tried a few things with no luck, to escape theses. Anyone out there that can plz |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
On 2006-08-21, Andy B wrote:
> Hi Guys, > > Wonder if you can , this problem is getting me down. > > My script is falling over with a sed problem. > > NEWSTORE=JvHCdEMzDegPI > NPASS=EoWH/Q4hds7nA > > sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp > > The above sed command works fine when there are no "special characters" > but when they appear as above i get a sed: command garbled: error. > Tried a few things with no luck, to escape theses. That's bacause $NPASS contains a slash. Use a different delimiter with sed: sed -e "/bill/s|${NEWSTORE}|${NPASS}|g" /tmp/temp -- Chris F.A. Johnson, author <http://cfaj.freeshell.org> Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) ===== My code in this post, if any, assumes the POSIX locale ===== and is released under the GNU General Public Licence |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
Andy B wrote:
> Hi Guys, > > Wonder if you can , this problem is getting me down. > > My script is falling over with a sed problem. > > NEWSTORE=JvHCdEMzDegPI > NPASS=EoWH/Q4hds7nA > > sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp > > The above sed command works fine when there are no "special characters" > but when they appear as above i get a sed: command garbled: error. > Tried a few things with no luck, to escape theses. > you can change the delimiter of s/// command to some other character which is not shown in your variables, like at sign, double quotes.. sed -e '/bill/s@'"${NEWSTORE}"'@'"${NPASS}"'@g' /tmp/temp Xicheng |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
Andy B wrote:
> Hi Guys, > > Wonder if you can , this problem is getting me down. > > My script is falling over with a sed problem. > > NEWSTORE=JvHCdEMzDegPI > NPASS=EoWH/Q4hds7nA > > sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp > > The above sed command works fine when there are no "special characters" > but when they appear as above i get a sed: command garbled: error. > Tried a few things with no luck, to escape theses. > > Anyone out there that can plz > Don't use / delimiters for the substitute, use some character that would not be in the encrypted password charset. Maybe ':' maybe ',' maybe ????? Looks like editing a passwd type file. You might wish to be more specific. What if you have a bill and billy? sed -e "/^bill:/s,${NEWSTORE},${NPASS},g" /tmp/temp And to make sure you are only changing the passwd field: (maybe there is another JvHCdEMzDegPI on the line )sed -e "/^bill:/s,^\([^:][^:]*:\)${NEWSTORE},\1${NPASS}," /tmp/temp Why the global "g"? You expect more than one $NEWSTOR per line? |
|
|
|
#5 (permalink) |
|
Messages: n/a
Hébergeur: |
Chris F.A. Johnson wrote: > On 2006-08-21, Andy B wrote: > > Hi Guys, > > > > Wonder if you can , this problem is getting me down. > > > > My script is falling over with a sed problem. > > > > NEWSTORE=JvHCdEMzDegPI > > NPASS=EoWH/Q4hds7nA > > > > sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp > > > > The above sed command works fine when there are no "special characters" > > but when they appear as above i get a sed: command garbled: error. > > Tried a few things with no luck, to escape theses. > > That's bacause $NPASS contains a slash. Use a different delimiter > with sed: > > sed -e "/bill/s|${NEWSTORE}|${NPASS}|g" /tmp/temp > > -- > Chris F.A. Johnson, author <http://cfaj.freeshell.org> > Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) > ===== My code in this post, if any, assumes the POSIX locale > ===== and is released under the GNU General Public Licence Hi Chris, Thanks for the reply. I would love to do this only problem is that the 2 variables $NEWSTORE and $NPASS, will be generated from a file that may have special characters in it ie !"£$%^&* etc, so what i need sed to do is read the variable in and ignore any special character that are in that variable. Is there a way round this at all? |
|
|
|
#6 (permalink) |
|
Messages: n/a
Hébergeur: |
On 2006-08-21, Andy B wrote:
> > Chris F.A. Johnson wrote: >> On 2006-08-21, Andy B wrote: >> > Hi Guys, >> > >> > Wonder if you can , this problem is getting me down. >> > >> > My script is falling over with a sed problem. >> > >> > NEWSTORE=JvHCdEMzDegPI >> > NPASS=EoWH/Q4hds7nA >> > >> > sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp >> > >> > The above sed command works fine when there are no "special characters" >> > but when they appear as above i get a sed: command garbled: error. >> > Tried a few things with no luck, to escape theses. >> >> That's bacause $NPASS contains a slash. Use a different delimiter >> with sed: >> >> sed -e "/bill/s|${NEWSTORE}|${NPASS}|g" /tmp/temp > > I would love to do this only problem is that the 2 variables > > $NEWSTORE and $NPASS, will be generated from a file that may have > special characters in it ie !"£$%^&* etc, so what i need sed to do is > read the variable in and ignore any special character that are in that > variable. > > Is there a way round this at all? You can escape the slashes within the variables, e.g.: NEWSTORE=$( printf "%s\n" "$NEWSTORE" | sed 's|/|\\/|g' ) -- Chris F.A. Johnson, author <http://cfaj.freeshell.org> Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) ===== My code in this post, if any, assumes the POSIX locale ===== and is released under the GNU General Public Licence |
|
|
|
#7 (permalink) |
|
Messages: n/a
Hébergeur: |
Chris F.A. Johnson wrote: > On 2006-08-21, Andy B wrote: > > > > Chris F.A. Johnson wrote: > >> On 2006-08-21, Andy B wrote: > >> > Hi Guys, > >> > > >> > Wonder if you can , this problem is getting me down. > >> > > >> > My script is falling over with a sed problem. > >> > > >> > NEWSTORE=JvHCdEMzDegPI > >> > NPASS=EoWH/Q4hds7nA > >> > > >> > sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp > >> > > >> > The above sed command works fine when there are no "special characters" > >> > but when they appear as above i get a sed: command garbled: error. > >> > Tried a few things with no luck, to escape theses. > >> > >> That's bacause $NPASS contains a slash. Use a different delimiter > >> with sed: > >> > >> sed -e "/bill/s|${NEWSTORE}|${NPASS}|g" /tmp/temp > > > > I would love to do this only problem is that the 2 variables > > > > $NEWSTORE and $NPASS, will be generated from a file that may have > > special characters in it ie !"£$%^&* etc, so what i need sed to do is > > read the variable in and ignore any special character that are in that > > variable. > > > > Is there a way round this at all? > > You can escape the slashes within the variables, e.g.: > > NEWSTORE=$( printf "%s\n" "$NEWSTORE" | sed 's|/|\\/|g' ) > > > -- > Chris F.A. Johnson, author <http://cfaj.freeshell.org> > Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) > ===== My code in this post, if any, assumes the POSIX locale > ===== and is released under the GNU General Public Licence Not for me to comment on a CFAJ post, but being a lazy admin, I would chnage the fun chars to some thing safe and simle, tilde, dash, etc. I used tr, worked on bash, linux. The tr needs to understand the set "[ ]". My older AIX was not that smart. printf "\n%s\n" '!"£$%^&*'|tr '[!"£$%^&*]' "~" 2 cents JB |
|
|
|
#8 (permalink) |
|
Messages: n/a
Hébergeur: |
Andy B wrote:
> Chris F.A. Johnson wrote: >> On 2006-08-21, Andy B wrote: >>> Hi Guys, >>> >>> Wonder if you can , this problem is getting me down. >>> >>> My script is falling over with a sed problem. >>> >>> NEWSTORE=JvHCdEMzDegPI >>> NPASS=EoWH/Q4hds7nA >>> >>> sed -e '/bill/s/'"${NEWSTORE}"'/'"${NPASS}"'/g' /tmp/temp >>> >>> The above sed command works fine when there are no "special characters" >>> but when they appear as above i get a sed: command garbled: error. >>> Tried a few things with no luck, to escape theses. >> That's bacause $NPASS contains a slash. Use a different delimiter >> with sed: >> >> sed -e "/bill/s|${NEWSTORE}|${NPASS}|g" /tmp/temp >> >> -- >> Chris F.A. Johnson, author <http://cfaj.freeshell.org> >> Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) >> ===== My code in this post, if any, assumes the POSIX locale >> ===== and is released under the GNU General Public Licence > > Hi Chris, > > Thanks for the reply. > > I would love to do this only problem is that the 2 variables > > $NEWSTORE and $NPASS, will be generated from a file that may have > special characters in it ie !"?$%^&* etc, so what i need sed to do is > read the variable in and ignore any special character that are in that > variable. > > Is there a way round this at all? > The sed's I've used also accept control characters, eg. ctrl-G, as substitute delimiters. Is there a possibility that your variables will contain control characters too? If not, try a control char, control X or control G or some such. sed "/bill/s^X$NEWSTORE^X$NPASS^Xg" |
|
![]() |
| Outils de la discussion | |
|
|