Using sed with bash variables


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
Question Using sed with bash variables

Hi Guys

I have another problem I'm trying to solve and hope that some one can help me here.

This is the scenario:

I have a file and I want to add a line on the 3rd line of the file using a bash script. but instead its adding the the bash variable $WEBSITE.

Below is the bash script I'm using.
Code:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

echo "what is the website ?"
read WEBSITE
if grep -q $WEBSITE "/etc/squid3/acls/allowed-sites"
then
        echo "$WEBSITE already exists"
else
        echo "adding website $WEBSITE"
        sed -ie '3i\$WEBSITE\' /etc/squid3/acls/allowed-sites
        echo "restarting squid"
fi

I have tried a few different ways of doing this with sed but nothing works.

Please help.



Moderator's Comments:
Mod Comment
Please wrap all code, files, input & output/errors in CODE tags.
It makes them far easier to read and preserves multiple spaces for indenting or fixed width data

Last edited by rbatte1; 06-04-2015 at 06:27 AM.. Reason: CODE tags and spelling/grammar corrections
# 2  
Please use code tags as required by forum rules!

The single quotes prevent the variable from expansion, so the literal name is inserted. Try using double quotes instead, and don't escape the $ with the \ . Some seds insist on a line break before the insertion text.
# 3  
I changed the code to this

Code:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

echo "what is the website ?"
read WEBSITE
if grep -q $WEBSITE "/etc/squid3/acls/allowed-sites"
then
        echo "$WEBSITE already exists"
else
        echo "adding website $WEBSITE"
        sed -i -e "3i$WEBSITE\" /etc/squid3/acls/allowed-sites
fi

and now im getting this error

Code:
/usr/local/sbin/add-website.sh: line 19: unexpected EOF while looking for matching `"'
/usr/local/sbin/add-website.sh: line 22: syntax error: unexpected end of file

Not sure where to go from here
# 4  
Quote:
Originally Posted by linuxjunkie
I changed the code to this

Code:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

echo "what is the website ?"
read WEBSITE
if grep -q $WEBSITE "/etc/squid3/acls/allowed-sites"
then
        echo "$WEBSITE already exists"
else
        echo "adding website $WEBSITE"
        sed -i -e "3i$WEBSITE\" /etc/squid3/acls/allowed-sites
fi

and now im getting this error

Code:
/usr/local/sbin/add-website.sh: line 19: unexpected EOF while looking for matching `"'
/usr/local/sbin/add-website.sh: line 22: syntax error: unexpected end of file

Not sure where to go from here
my crystal ball says there's no matching double-quote on line 19 of your script.
sed -i -e "3i$WEBSITE\" /etc/squid3/acls/allowed-sites
What exactly is the purpose of \"?
# 5  
Question

if u use the command like this

Code:
 sed -i -e "3i/$WEBSITE/g" /etc/squid3/acls/allowed-sites

then i get this in the file
Code:
/mm.mm/g

Im new to using sed so i dont really know what all the quotes and things mean yet.
# 6  
So that would mean that the variable WEBSITE contained the text mm.mm . Could that be?
# 7  
That is correct

---------- Post updated at 04:43 PM ---------- Previous update was at 04:36 PM ----------

I managed to fix it. The old code was

Code:
sed -ie '3i$WEBSITE\' /etc/squid3/acls/allowed-sites

The correct code to allow the variable to work is

Code:
sed -i -e '3i'$WEBSITE'\' /etc/squid3/acls/allowed-sites

So now if i run the script and use debian.com as the input text for the variable then it adds the text debian.com to the file allowed-sites.

Code:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

echo "what is the website ?"
read WEBSITE
if grep -q $WEBSITE "/etc/squid3/acls/allowed-sites"
then
        echo "$WEBSITE already exists"
else
        echo "adding website $WEBSITE"
        sed -i -e '3i'$WEBSITE'\' /etc/squid3/acls/allowed-sites
        echo "restarting squid"
        /etc/init.d/squid3 restart
fi

Thanks for the help guys !.

Last edited by linuxjunkie; 06-04-2015 at 11:55 AM..
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Passing awk variables to bash variables

Trying to do so echo "111:222:333" |awk -F: '{system("export TESTO=" $2)}'But it doesn't work (2 Replies)
Discussion started by: urello
2 Replies

2. Shell Programming and Scripting

BASH arrays and variables of variables in C++

Sometimes it is handy to protect long scripts in C++. The following syntax works fine for simple commands: #define SHELLSCRIPT1 "\ #/bin/bash \n\ echo \"hello\" \n\ " int main () { cout <<system(SHELLSCRIPT1); return 0; } Unfortunately for there are problems for: 1d arrays:... (10 Replies)
Discussion started by: frad
10 Replies

3. Shell Programming and Scripting

Indirect variables in Bash

Hello, I've spent hours this morning reading various past forum posts and documentation pages but I can't find exactly what I need. I'm trying to call a variable with a variable in the name without having to make a third variable. For example: path=AB legAB=50 leg$path I want to... (8 Replies)
Discussion started by: DFr0st
8 Replies

4. Shell Programming and Scripting

functions and variables in bash

I have a bash script with some functions as below and am wondering if I can use the variables declared in setup in the other functions and in the rest of the bash script. setup(){ none=0; low=1; medium=2; high=3; debug=4 var1="red" var2="fred" } create_basemap() { ... (7 Replies)
Discussion started by: kristinu
7 Replies

5. Shell Programming and Scripting

Complex bash/sed, variables and nested quotes

Ok, this one isn't for everybody, it's pretty tough and I've spent a good deal of time on it without figuring it out yet. Can anybody get this script to work: #!/bin/bash cq_fname="%let outputfile="/user/cq_"$1".csv";" sed "29s/.*/\"$cq_fname\"/" file1.sas >... (3 Replies)
Discussion started by: nocloud
3 Replies

6. Shell Programming and Scripting

Creating variables in bash

I am writing some scripts using bash and am wondering if there is a better way to perform the following set of formatting variables. s1=" " s2=" " s3=" " s4=" " s5=" " s6=" " s7=" " s8=" " frmt_titl="${bYl}%s${nClor}\n" frmt1_titl="${s1}$frmt_titl"... (10 Replies)
Discussion started by: kristinu
10 Replies

7. Shell Programming and Scripting

while loops and variables under bash

Hi, This is probably going to be very simple but i came across something i can't quite explain. Here is the situation: i have a list of files, which i'd like to process one by one (get the size, make some tests, whatever) and generate some statistics using different variables. Something... (5 Replies)
Discussion started by: m69w
5 Replies

8. Shell Programming and Scripting

Bash variables

Ummm can anybody help me with this one? Its prob quite simple. I bascially have a file name say J1x2x3x7.dat Im using the file name as a variable in a bash script. Want I want to do is extract most of the file name and make it a new variable expect with say one of the number now a... (2 Replies)
Discussion started by: RichieFondel
2 Replies

9. Shell Programming and Scripting

using sed on bash variables (or maybe awk?)

Hi all- I've been fooling with this for a few days, but I'm rather new at this... I have a bash variable containing a long string of various characters, for instance: JUNK=this that the other xyz 1234 56 789 I don't know what "xyz" actually is, but I know that: START=he other and ... (2 Replies)
Discussion started by: rev66
2 Replies

10. UNIX for Dummies Questions & Answers

bash shell variables

Hi everyone, I have added this to my .bash_profile. Whenever I log in and when I type javac I get a error message (java: command not found). Does the order counts? PATH=$JAVA_HOME/bin:$PATH:$HOME/bin JAVA_HOME=$JAVA_HOME/usr/local/jdk1.3.1_02 export JAVA_HOME PATH Thanks ny (3 Replies)
Discussion started by: xNYx
3 Replies

Featured Tech Videos