Pattern replacing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Pattern replacing
# 1  
Old 07-05-2015
Pattern replacing

Hi,

I have a text file with lots of text (strings,numbers,special characters etc). I am trying to replace any occurrence of these strings :

Code:
90%
91%
92%
....
100%

I want to replace them with :

Code:
"90%"
"91%"
"92%"
....
"100%"

I am now using 10 sed commands for replacement but I know it's stupid. There should be a better way. How do I do it with an one liner?
# 2  
Old 07-05-2015
Code:
sed -e 's/[0-9]\{1,\}%/"&"/g' file

Code:
perl -pe 's/\d+%/"$&"/g' file


Last edited by Aia; 07-05-2015 at 12:43 PM..
This User Gave Thanks to Aia For This Post:
# 3  
Old 07-05-2015
Thanks for the quick reply. I am facing a small issue. Its replacing other numbers too. I want to specifically replace only percentages from 90 to 100.
# 4  
Old 07-05-2015
Code:
sed -e 's/\(^\| \)\(9[0-9]%\|100%\)/\1"\2"/g' file

Code:
perl -pe 's/\b(?:9[0-9]|100)%/"$&"/g' file

This User Gave Thanks to Aia For This Post:
# 5  
Old 07-05-2015
Quote:
Originally Posted by Aia
Code:
sed -e 's/\(^\| \)\(9[0-9]%\|100%\)/\1"\2"/g' file

... ... ...
Aia,
Standard sed uses BREs; not EREs. Basic regular expressions do not include alternation (i.e., BRE|BRE). Furthermore, we don't know what separates a percentage to be quoted from its surroundings. With the following input:
Code:
123% 992% 100% 90% 93%92%,100%(90%+10%) 77.99%

a standard sed (with your suggested command) produces the output:
Code:
123% 992% 100% 90% 93%92%,100%(90%+10%) 77.99%

(which I do not believe is what is wanted) and your perl script produces:
Code:
123% 992% "100%" "90%" "93%""92%","100%"("90%"+10%) 77."99%"

(which I assume is closer to what is wanted).

I believe that what was requested was:
Code:
123% 9"92%" "100%" "90%" "93%""92%","100%"("90%"+10%) 77."99%"

but, without confirmation that that really is what is wanted from ctrid, I'm not going to try to produce a different sed or awk script that does what I might think would be a more reasonable interpretation.

ctrid,
Please give us a clear specification of what, if any, characters or strings appearing adjacent to a percentage should keep it from being quoted. (If a period or comma is to be interpreted as part of a percentage, are these characters locale specific?) Should something like 91.50% (in the C Locale) be quoted (since it is in the range 90% to 100%, inclusive)?
This User Gave Thanks to Don Cragun For This Post:
# 6  
Old 07-05-2015
Quote:
Originally Posted by Don Cragun
[...]
but, without confirmation that that really is what is wanted from ctrid, I'm not going to try to produce a different sed or awk script that does what I might think would be a more reasonable interpretation.
[...]
Don,
A times overthinking it is paralyzing, as it just happened to you.
Appreciate you.
This User Gave Thanks to Aia For This Post:
# 7  
Old 07-06-2015
Hi Don,

Very good catch. Even I didn't anticipate the decimals.
As you said there could be decimals.

But
Code:
992%

or
Code:
 93%92%

or
Code:
100%(90%+10%)

would not be in my input text file. All percentages are delimited by space and no periods or any other characters appear anywhere.

Hence only danger I see is of decimals. Don, Thanks once again for pointing out this.
Aia, your one liner is cool, it works for now. As Don said I have an issue only if my input file changes with decimals. How do I modify this perl statement to take care of that?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Finding the pattern and replacing the pattern inside the file

i have little challenge, help me out.i have a file where i have a value declared and and i have to replace the value when called. for example i have the value for abc and ccc. now i have to substitute the value of value abc and ccc in the place of them. Input File: go to &abc=ddd; if... (16 Replies)
Discussion started by: saaisiva
16 Replies

2. Shell Programming and Scripting

Replacing a pattern in different cases in different columns with a single pattern

Hi All I am having pipe seperated inputs like Adam|PeteR|Josh|PEter Nick|Rave|Simon|Paul Steve|smith|PETER|Josh Andrew|Daniel|StAlin|peter Rick|PETer|ADam|RAVE i want to repleace all the occurrence of peter (in any case pattern PeteR,PEter,PETER,peter,PETer) with Peter so that output... (5 Replies)
Discussion started by: sudeep.id
5 Replies

3. Shell Programming and Scripting

replacing pattern

hi, I want to do replacing of some pattern by using sed. pattern : " white space / to white space / please help -bhrat (3 Replies)
Discussion started by: bhrat kapoor
3 Replies

4. Shell Programming and Scripting

Replacing pattern

Hi, I have a file which contains the below data. I want to search for a pattern server="http://bushby.mis.amat.com:12440" and remove it from the file. Please let me know how can i do this. <Object name="reverse-proxy-/endeavour/"> ObjectType fn="http-client-config" timeout="1800"... (6 Replies)
Discussion started by: Krrishv
6 Replies

5. Shell Programming and Scripting

Replacing pattern

Hi, I have a file which contains the below data. I want to change pattern to correct format. # tail -1 test.log | awk '{print $8}' 10/09/23 # I want the format to be 23/09/10 (5 Replies)
Discussion started by: nareshkumar522
5 Replies

6. Shell Programming and Scripting

Replacing a pattern using variable?

ip1="xxx" ip2="bbb" sed 's/$ip1/$ip2/g' (3 Replies)
Discussion started by: shivarajM
3 Replies

7. UNIX for Dummies Questions & Answers

Replacing between pattern

Hi all, I been searching the forum for a few hours now and can't find exactly what I need to replace text between two patterns. Below is what I want to accomplish /* Any text between these to sympols */ changed to.... /* This will be the new text to change */ ..and I'm... (3 Replies)
Discussion started by: Pauky
3 Replies

8. Shell Programming and Scripting

Replacing all except for the matching pattern

Hi all I need to replace all characters in a file except for the matching pattern eg. I need to replace all character with '*' except for the pattern "abc" Input "sdfhgsdf abc ##%$#abcsdfh sdfjkfff" Output "******abc******abc*************" Request for single liner solution (1 Reply)
Discussion started by: raghav288
1 Replies

9. Shell Programming and Scripting

replacing a pattern in a file

Hi guys, i have a pattern that i am searching in a file and i want to extract some of this pattern ... module TS1N65ULPA96X32M4 ( .... i want to extract only TS1N65ULPA96X32M4 part and i do the following sed 's/module \(x*\).*/\1/' name_of_file but this is not quite right. could... (6 Replies)
Discussion started by: ROOZ
6 Replies

10. Shell Programming and Scripting

Replacing pattern in variable

My String variable is holding value as - abc"def I want to replce " with \" I tried with awk : echo $var | awk '{gsub(/"/,"\"");print}' and I am getting an error, `)' is not expected. (1 Reply)
Discussion started by: videsh77
1 Replies
Login or Register to Ask a Question