Visit Our UNIX and Linux User Community


SED variable substitution


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting SED variable substitution
# 1  
Old 10-06-2009
SED variable substitution

Hi Chaps...

I have a log file as below:-

Code:
01 Oct 2009 12:57:56 DEBUG [pollingThread]:

01 Oct 2009 12:14:21 DEBUG [pollingThread]:.....
.
.
.
.05 Oct 2009 14:31:56 DEBUG [pollingThread]:....
.
.
.05 Oct 2009 12:57:56 DEBUG [pollingThread]:....
 
06 Oct 2009 01:23:11 DEBUG [pollingThread]:....
.
.
.06 Oct 2009 12:53:46 DEBUG [pollingThread]:....

Now I have to cut all the logs whcih are created today and do some basic operation...

now considering my end string time stamp will vary I have cut the time stamp of last line to a variable...

and start string can be taken as date as I have date in my log...

for cutting the log file i have written ..
Code:
 
#!/bin/bash
 
. ~/.profile
 
date_var=`date "+%d %h %Y"`
#date_var='01 Oct 2009'
time_stamp=`tail -1 Interface.log | cut -f4 -d " "`
end_string="$date_var $time_stamp"
sed '/^'$date_var'/,/^'$end_string'/!d' Interface.log | sed '/^#/d' | sed '$d' >> current_day_log.txt

when I run above script I get error as sed: command garbled: /^06

looks like there is a problem while substituting the varibale in SED...can anybody point out what I am doing wrong here...

Many Thanks in advance...

Last edited by pludi; 10-06-2009 at 10:36 AM.. Reason: code tags!!
# 2  
Old 10-06-2009
Code:
use "" instead of ''

sed "/^$date_var/,/^$end_string/!d"

BR

# 3  
Old 10-06-2009
You have a whitespaces in you $date_var, so
Code:
sed '/^'$date_var'/,/^'$end_string'/!d' Interface.log | sed '/^#/d' | sed '$d' >> current_day_log.txt

is seen by the shell as (example)
Code:
sed /^01 Oct 2009/,/^01 Oct 2009 12:14:21/!d Interface.log | sed /^#/d | sed $d >> current_day_log.txt

This means that the sed command isn't seen as one parameter, but several, breaking the structure/command.

Better write it as
Code:
sed '/^'"$date_var"'/,/^'"$end_string"'/!d' Interface.log | sed '/^#/d' | sed '$d' >> current_day_log.txt

so that the whitespaces aren't seen as parameter delimiters, without running into parameter expansion problems.
# 4  
Old 10-06-2009
The reason for your problem is that your variables contain spaces and a space character is interpreted by the shell as a field separator. Consider the following:

Code:
command arg1 arg2

The shell will treat "arg1" and "arg2" as different arguments. If you want these to be one argument of the form "arg1 arg2" you will have to use quotation marks to explain that to the shell:

Code:
command "arg1 arg2"

Here is your corrected script. Notice the differences (btw. i have shortened the superfluous pipeline into one sed invocation):

Code:
#!/bin/bash
 
. ~/.profile
 
date_var="$(date "+%d %h %Y")"
#date_var='01 Oct 2009'
time_stamp="$(tail -1 Interface.log | cut -f4 -d' ')"
end_string="$date_var $time_stamp"
sed -n '/^'"$date_var"'/,/^'"$end_string"'/ {;/^#/d;p;}' Interface.log  >> current_day_log.txt

I hope this helps.

bakunin
# 5  
Old 10-06-2009
cheers!!!! mate

Previous Thread | Next Thread
Test Your Knowledge in Computers #344
Difficulty: Medium
In February 2005, Sun announced the Sun Grid, a grid computing deployment on which it offered utility computing services priced at US$2 per CPU/hour for processing and per GB/month for storage.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed variable expansion fails for substitution in range

I'm trying to change "F" to "G" in lines after the first one: 'FUE.SER' 5 1 1 F0501 F0401 F0502 2 1 F0301 E0501 F0201 E0502 F0302 3 1 F0503 E0503 E0301 E0201 E0302 E0504 F0504 4 1 F0402 F0202 E0202 F0101 E0203 F0203 F0403 5 1 F0505 E0505 E0303 E0204 E0304 E0506... (10 Replies)
Discussion started by: larrl
10 Replies

2. Shell Programming and Scripting

sed variable substitution in a script

Hi I am trying to do the following in a script find a string and add in a block of text two lines above on the command line this works fine #/usr/bin/cat /usr/local/etc/dhcpd.conf_subnet | /usr/xpg4/bin/sed -n -e '1h;1\!H;${;g;s/}.*#END of 10.42.33.0/#START of RANGE $dstart\:option... (3 Replies)
Discussion started by: eeisken
3 Replies

3. Shell Programming and Scripting

Sed - variable substitution

Problem with the code below is that the value of the variable is not getting substituted in the sed expression. #/bin/csh set UNIX_ID="rajibd" set X_ID="xrajibd" sed -n 's/$UNIX_ID/$X_ID/g' passwd When run , it is not giving expected output as shown below : ... (4 Replies)
Discussion started by: hiten.r.chauhan
4 Replies

4. Shell Programming and Scripting

Sed variable substitution

Hello, I searched the forum and unable to find a solution for my particular problem. I have a text file I'm trying to insert some text using sed after finding a pattern.. File contains in one line Invoice date: xx/xx/xxxx Balance: $$$$ Name: xxxxxxxxxxxxxx Trying to insert Invoice "Number:... (3 Replies)
Discussion started by: mallu0987
3 Replies

5. Shell Programming and Scripting

Simple sed variable substitution

Give the code: set line = 2 set year = `sed -n '2p' file while ($line < 500) echo $line > f.txt @ line = $line + 1 end How do I utilize the variable $line in the code instead of the number 2. I'm using this in a while loop and counter. I've tried quoting it, double/single... (1 Reply)
Discussion started by: wxornot
1 Replies

6. Shell Programming and Scripting

variable substitution in sed

Hi, I have to insert a line at a particular line number in my file. But the line number is not fixed and it will vary every time. So, I have to use a variable to get the line number I know we can use sed to insert lines at a particular line number but it does not work with variable... (3 Replies)
Discussion started by: sugan
3 Replies

7. Shell Programming and Scripting

sed variable substitution problem

Hi, I am facing a strange problem. I have a script that used the following to search and replace text: sed 's/'"${find_var_parm}"'/'"${find_var_filter}"'/g' $ParmFile > $TempFile The values of $find_var_parm and $find_var_filter are set based on search criteria. The above seems to be working... (2 Replies)
Discussion started by: arsh
2 Replies

8. Shell Programming and Scripting

Sed variable substitution when variable constructed of a directory path

Hello, i have another sed question.. I'm trying to do variable substition with sed and i'm running into a problem. my var1 is a string constructed like this: filename1 filerev1 filepath1 my var2 is another string constructed like this: filename2 filerev2 filepath2 when i do... (2 Replies)
Discussion started by: alrinno
2 Replies

9. Shell Programming and Scripting

how to do variable substitution in 'sed'

I have a 'sed' editor command trying to read contents of one file into another. v=t1 PX=25 sed '/for/ r /$v/ext/tsfirmfiles.${PX}' /bb/bin/px${PX}.files.2b.deleted > result I cannot come up with the syntax so 'sed' would do a variable substitution. Any idea? Thanks a for help. -A (1 Reply)
Discussion started by: aoussenko
1 Replies

10. Shell Programming and Scripting

How to use sed substitution using a $variable for a line containing a word

$ cat ggg /E*Fare/testteam/public/pf3/nggfstatic/4k-pf3_3.case REGION1: /E*Fare/dist/src/nggfstaticbase/EFare/Server CODEBASE1: /dev_tools/LINUXMTP-4/EFS070718E/EFare/Server DATABASE1: nggfstatic SCRIPT: /efare1/admin/ezlcn/scripts/pf3_3_scriptlist.input PROLOGINITSIZE not yet set You... (4 Replies)
Discussion started by: Sangal-Arun
4 Replies

Featured Tech Videos