Visit Our UNIX and Linux User Community


Use sed commands on multiple lines


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Use sed commands on multiple lines
# 1  
Old 06-13-2019
Use sed commands on multiple lines

I have a text file and i want to run 3 sed commands for the lines entered by the user using perl script. I am doing this manually till now.

need some help with this

The sed commands I have to use are :

Code:
sed -i "s/{+//" error.txt
sed -i "s/+}//" error.txt
sed -i "s/\[-.*-]//g" error.txt

error.txt is the file where I want to run these commands but i want them to run on a particular line which i will enter

Error.txt:

Code:
1:module counter ( clk, reset, enable, {+dat_out+} );

4: input clk, [-reset ;-] {+reset, enable;+}

5: wire {+N69, N70, N71,+} N72, N73, N74, N75, N76, N77, N78, N79, N80,

10: EDFFX2AD \dat_out_sig_reg[0] ( [-.D(synopsis_unconnected),-] {+.D(N69),+} .E(N96), .CK(clk), .Q(dat_out[0])

12: EDFFX2AD \dat_out_sig_reg[1] ( {+.D(N70),+} .E(N94), .CK(clk), .Q(dat_out[1])

14: EDFFX2AD \dat_out_sig_reg[2] ( .D(N71), [-.E(synopsis_unconnected),-] {+.E(N92),+} .CK(clk), .Q(dat_out[2])

expected output:

Code:
1:module counter ( clk, reset, enable, dat_out );

4: input clk, [-reset ;-] {+reset, enable;+}

5: wire {+N69, N70, N71,+} N72, N73, N74, N75, N76, N77, N78, N79, N80,

10: EDFFX2AD \dat_out_sig_reg[0] ( .D(N69), .E(N96), .CK(clk), .Q(dat_out[0])

12: EDFFX2AD \dat_out_sig_reg[1] ( {+.D(N70),+} .E(N94), .CK(clk), .Q(dat_out[1])

14: EDFFX2AD \dat_out_sig_reg[2] ( .D(N71), [-.E(synopsis_unconnected),-] {+.E(N92),+} .CK(clk), .Q(dat_out[2])

The codes are applied on Line 1 and Line 10. Please suggest something

Last edited by Scrutinizer; 06-14-2019 at 06:17 AM.. Reason: code tags correction
# 2  
Old 06-13-2019
You can add line number like this to run substitute only on first line
Code:
sed -i "1{s/{+//;s/+}//;}" error.txt

# 3  
Old 06-13-2019
Try also
Code:
sed '1bL; 10bL; b; :L; p; s/{+\|+}\|\[-.*-]//g;' file


EDIT: removed p; leftover from testing / debugging:

Code:
sed '1bL; 10bL; b; :L; s/{+\|+}\|\[-.*-]//g;' file


Last edited by RudiC; 06-14-2019 at 06:23 AM..
# 4  
Old 06-14-2019
cant i use a variable instead of that 1?
# 5  
Old 06-14-2019
Yes but use double quotes for variable substitution
Code:
var=1
sed "${var}..." file

# 6  
Old 06-14-2019
Quote:
Originally Posted by utkarshkhanna44
cant i use a variable instead of that 1?
In principle you can, but sed uses a lot of characters with a special meaning to the shell. Therefore, to protect the shell from reading it, sed-commands are usually enclosed in single-quotes:

Code:
sed '<...sed-commands...> ' /some/file

This, in turn, has a side effect: the shell ignores anything inside single-quotes and hence variables are not expanded. If you write something like:

Code:
command $var

then prior to executing the line the shell replaces "$var" with the content of the variable. This is not the case inside single quotes. You can use double quotes instead ("), but this may have side effects too (i.e. "*" means something to the shell it might expand it), therefore you should use a mix of single- and double-quoting:

Code:
sed '<...sed-commands...> '"$var"'<...more sed-commands...>' /some/file

This looks cumbersome at first but offers the best protection and the most robustness. Notice that your variables can contain i.e. numbers and other simple things but under no circumstances you should put parts of regexps and special characters into your variables! Even if it works this is a great recipe for disaster.

I hope this helps.

bakunin
These 3 Users Gave Thanks to bakunin For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #833
Difficulty: Medium
YAML version 1.2 is a superset of JSON.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed hash in multiple lines

Hi everybody, I am writing a little script to manage keystores and need some help with sed. The output of the keystore file is like: vi 2, Dec 7, 2012, trustedCertEntry, Certificate fingerprint (MD5): F9:1F:FE:E6:A3:CB:99:88:44:D4:67:ED:G5:F8:97:7A system@remote-server, Dec 17, 2013,... (13 Replies)
Discussion started by: Hamss
13 Replies

2. Shell Programming and Scripting

Using sed to execute multiple commands

Let's say I have a file called test.out. In this file I want to do the following: 1. Search for DIP-10219 and with this: 2. Remove everything in front of cn= 3. Remove everything after *com 4. Remove duplicate lines 5. Replace ( with \( 6. Replace ) with \) For 1-3 I have figured out this... (11 Replies)
Discussion started by: exm
11 Replies

3. Shell Programming and Scripting

Variables into SED or AWK and multiple commands

Hello I am hoping you may help. I am not sure how to go about this exactly, I know the tools but not sure how to make them work together. I have two SED commands that I would like to run in a shell script. I would like to take the manual input of a user (types in when prompted) to be used... (4 Replies)
Discussion started by: lostincashe
4 Replies

4. Shell Programming and Scripting

Putting multiple sed commands on a single line

Hi, I want to make sed write a part of fileA (first 7 lines) to file1 and the rest of fileA to file2 in a single call and single line in sed. If I do the following: sed '1,7w file1; 8,$w file2' fileA I get only one file named file1 plus all the characters following file1. If I try to use curly... (1 Reply)
Discussion started by: varelg
1 Replies

5. Shell Programming and Scripting

sed: working with multiple lines

Got another sed question :) My text block is I need to do the following: If (and only if) the line starting with 10002,11 is followed by a line starting with 10004,9 , insert the line 10003,9 between the 2 Thus, my output should be I tried but this gives me (the order... (3 Replies)
Discussion started by: orno
3 Replies

6. Shell Programming and Scripting

Use sed to merge multiple lines

Hi all: I have a file in which the contents are as following: ... This is a test ONE TWO Hello, world! XXX YYY CCC test again three, four five six seven world AAA BBB QQQ test eight, nine world (3 Replies)
Discussion started by: xb88
3 Replies

7. UNIX for Dummies Questions & Answers

Can I spread commands over multiple lines?

Below an example of what I mean. The first attempt does what I want; the second doesn't, because bash assumes a line break means the end of an individual "command unix". Is there some way that I can convince bash to parse out, eg, to the closing parenthesis? I'm thinking this would allow for... (1 Reply)
Discussion started by: tphyahoo
1 Replies

8. Shell Programming and Scripting

multiple sed commands

hello! I have a few sed commands sed '/^$/d' < $1 > tmp.t sed '/^ \{3,\}/d' < tmp.t > tmp1.txt ..... how can I write them in a single line? sed '/^$/d' < $1 > | '/^ \{3,\}/d' < $1 > tmp1.txt any idea? thanks. (5 Replies)
Discussion started by: george_
5 Replies

9. Shell Programming and Scripting

sed: Multiple Commands applied to an address

Trying to write a sed command that applies multiple replacements to a specific address. Need a second pair of eyes I guess cause my syntax appears to be correct (obviously not though) I am getting an error. Any Help would be appreciated! Thanks in advance. sed -f foo envOracle sed: Function... (2 Replies)
Discussion started by: google
2 Replies

10. Shell Programming and Scripting

Deleting Multiple Lines with sed

I am trying to use sed to delete multiple lines in a file. The problem is that I need to search for a certain line and then once found delete it plus the next 4 lines. For instance if I had a file that consisted of the following lines: #Data1.start ( (Database= data1) (Name = IPC)... (1 Reply)
Discussion started by: rambo15
1 Replies

Featured Tech Videos