Use sed commands on multiple lines


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
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 05:17 AM.. Reason: code tags correction
# 2  
You can add line number like this to run substitute only on first line
Code:
sed -i "1{s/{+//;s/+}//;}" error.txt

# 3  
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 05:23 AM..
# 4  
cant i use a variable instead of that 1?
# 5  
Yes but use double quotes for variable substitution
Code:
var=1
sed "${var}..." file

# 6  
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:
Login or Register for Dates, Times and to Reply

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

Test Your Knowledge in Science: Gadgets
Difficulty: Easy
The communication protocol NFC stands for Near-Field Control.
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

Delete multiple lines w/ sed

Hi all, I am trying to figure out the syntx to delete multiple lines w/ sed. I know the following syntax will delete lines 1 THROUGH 5 from filex: sed 1,5d filex But I wan to delete lines 1 AND 5 (keeping lines 2,3, and 4). Does anyone know how to do this in a single sed statement? ... (2 Replies)
Discussion started by: bookoo
2 Replies

Featured Tech Videos