Variable in not resolving in sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Variable in not resolving in sed
# 1  
Old 07-05-2017
Variable in not resolving in sed

I'm trying to search the 2 pattern in consecutive lines and print them but my variables are not resolving in sed (using bash shell) -

Code:
# cat testfile2.txt
Fixing Storage Locations to remove extra slash;
Fixing Storage Locations to remove extra slash;
Fixing Storage Locations to remove extra slash;
Fixing Storage Locations to remove extra slash;
Fixing Storage Locations to remove extra slash;
Fixing Storage Locations to remove extra slash; we have 0 locations in the database
Catalog OID generator updated based on GLOBAL tier catalog"
Catalog OID generator updated based on GLOBAL tier catalog"


# sed '$!N;/extra.*\n.*Catalog/p;D' testfile2.txt
Fixing Storage Locations to remove extra slash; we have 0 locations in the database
Catalog OID generator updated based on GLOBAL tier catalog"


# message1=extra
# message2=Catalog
# echo $message1
extra
# echo $message2
Catalog
# sed '$!N;/$message1.*\n.*$message2/p;D' testfile2.txt

# 2  
Old 07-05-2017
Quote:
Originally Posted by Mannu2525;303000147but my variables are not resolving in sed (using bash shell)
Code:
# sed '$!N;/$message1.*\n.*$message2/p;D' testfile2.txt

The reason is that the single quotes into which you put the sed-statement(s) are prventing exactly that (the expansion of variables. Try the following:

Code:
# x="foo"
# echo $x
# echo "$x"
# echo '$x'

You can use variables by "interrupting" the quotes. Suppose the following simple sed-script which replaces "old" with "new" - notice the quotation, by which after the variable expansion a single string is guaranteed:

Code:
# search="old"
# repl="new"
# echo "old old old" | sed 's/'"$search"'/'"$repl"'/g'
new new new

Note, that variables might contain characters which have a meaning for sed. Suppose the variable "search" would contain a slash:

Code:
# search="old/"
# repl="new"
# echo "old/ old/ old/" | sed 's/'"$search"'/'"$repl"'/g'

This would break the sed-statement, because the slash would alter the statement itself. Therefore you need to check carefully what your variables contains before using it as part of a sed-statement.

I hope this helps

bakunin
# 3  
Old 07-05-2017
Another way would be to replace the single quotes with double ones
Code:
sed "s/${var1}.*/${var2}/g"

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Resolving the UNIX path variable

Friends, I trying to get the unix path fro a config file. There are 100 + path variables defined in the master_config.sh. Like this ; app_dir=/project/emp abc_dir=${app_dir}/abc/app abc_common=${abc_dir}/common abc_common_base=${abc_common}/base... (2 Replies)
Discussion started by: arunv123
2 Replies

2. UNIX for Beginners Questions & Answers

Help for resolving Unexpected EOF while assigning value to variable

#!/bin/sh . /opt/ora/oracle/db/tech_st/11.2.3/PROD_proddb.env sqlplus -s "username/password" << EOF no='sqlplus -s username/password<<EOF set heading off set feedback off Select pt.user_concurrent_program_name report_name , OUTFILE_NAME report_path FROm apps.fnd_concurrent_programs_tl... (12 Replies)
Discussion started by: usman_oracle
12 Replies

3. Shell Programming and Scripting

Resolving the environment variable from a file

Hi, I an having some environment variables exported and the variable name is present in the file. But its not resolving with following commands. Can someone throw some light. db $ grep -v "^#" TD_FWK_NUCLEUS.dbc | grep -v "^$" | xargs -i echo {} wb_bin: ${TD_FWK_NUCLEUS_DBC_WB_BIN_TAG} I... (3 Replies)
Discussion started by: Mohammed Rafi
3 Replies

4. Red Hat

How to pass value of pwd as variable in SED to replace variable in a script file

Hi all, Hereby wish to have your advise for below: Main concept is I intend to get current directory of my script file. This script file will be copied to /etc/init.d. A string in this copy will be replaced with current directory value. Below is original script file: ... (6 Replies)
Discussion started by: cielle
6 Replies

5. Shell Programming and Scripting

Expand an environment variable in sed, when the variable contains a slash

I'm trying to make a sed substitution where the substitution pattern is an environment variable to be expanded, but the variable contains a "slash". sed -e 's/<HOME_DIRECTORY>/'$HOME'/'This gives me the following error: sed: -e expression #1, char 21: unknown option to `s'Obviously this is... (2 Replies)
Discussion started by: Ilja
2 Replies

6. Shell Programming and Scripting

Resolving Var to its contents

Hello everyone.... I am trying to dinamically create variable names and do resolution of this vars contents. After that is done I want to use (via a function call) the var and its contents by referring to it via the variable name. I am having a hard time achieving this .... can you help ? ... (5 Replies)
Discussion started by: gio001
5 Replies

7. Shell Programming and Scripting

Insert a line including Variable & Carriage Return / sed command as Variable

I want to instert Category:XXXXX into the 2. line something like this should work, but I have somewhere the wrong sytanx. something with the linebreak goes wrong: sed "2i\\${n}Category:$cat\n" Sample: Titel Blahh Blahh abllk sdhsd sjdhf Blahh Blah Blahh Blahh Should look like... (2 Replies)
Discussion started by: lowmaster
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. UNIX for Dummies Questions & Answers

Need help in resolving Compilation error

state_field state_abvr = { "AL","ALABAMA", "AK","ALASKA", "AZ","ARIZONA", "AR","ARKANSAS", "CA","CALIFORNIA", "CO","COLORADO", "CT","CONNECTICUT", "DE","DELAWARE", "DC","DISTRICT-OF-COLUMBIA", "FL","FLORIDA", "GA","GEORGIA", "HI","HAWAII", "ID","IDAHO", "IL","ILLINOIS",... (1 Reply)
Discussion started by: jagan_kalluri
1 Replies

10. UNIX for Advanced & Expert Users

DNS not resolving

I have configured my solaris 9 box to obtain a IP from the DHCP server which is on windows, I have also set up the DNS with domain name and name servers under /etc/resolv.conf I can ping a ip address I just cant seem to ping hostnames, theres probaly something im not doing. I have looked through... (9 Replies)
Discussion started by: Mr Pink
9 Replies
Login or Register to Ask a Question