sed or awk editing help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed or awk editing help
# 8  
Old 10-30-2010
Code:
sed 's: *, *:,:g' infile

# 9  
Old 10-30-2010
Quote:
Originally Posted by ygemici
additional If you have spaces and also tabs you can use Smilie
Code:
# sed 's/,[[:space:]]*,/,,/g' infile

this misses odd instances with adjacent spaces, since you used the opening , as a trailing , -- You must do it twice.

---------- Post updated at 05:28 PM ---------- Previous update was at 05:27 PM ----------

Quote:
Originally Posted by ctsgnb
Code:
sed 's: *, *:,:g' infile

Also kills leading and trailing spaces, more than was requested originally, but gets past the double run need of patterns with two commas.

---------- Post updated at 05:34 PM ---------- Previous update was at 05:28 PM ----------

Quote:
Originally Posted by Scrutinizer
This takes out space-only fields at the beginning and end as well, while leaving all other spaces intact.
Code:
sed 's/\(^\|,\) *\(,\|$\)/\1\2/g'

GNU sed -r :
Code:
sed -r 's/(^|,) *(,|$)/\1\2/g'

Does that work -- usually putting ^$ inside |(\) is NG.

You have to do it twice for ", , ,"!

None of us took care of the first or last field except your sed -r (but needs to run twice)! I would put '^' second in the (|) list, as less often true, for speed.
# 10  
Old 10-30-2010
Quote:
Originally Posted by DGPickett
this misses odd instances with adjacent spaces, since you used the opening , as a trailing , -- You must do it twice.
i think there is no so this essentiality in this example
and you and me can not know if necessary Smilie
# 11  
Old 10-31-2010
Quote:
Originally Posted by DGPickett
this misses odd instances with adjacent spaces, since you used the opening , as a trailing , -- You must do it twice.

---------- Post updated at 05:28 PM ---------- Previous update was at 05:27 PM ----------


Also kills leading and trailing spaces, more than was requested originally, but gets past the double run need of patterns with two commas.

---------- Post updated at 05:34 PM ---------- Previous update was at 05:28 PM ----------



Does that work -- usually putting ^$ inside |(\) is NG.

You have to do it twice for ", , ,"!

None of us took care of the first or last field except your sed -r (but needs to run twice)! I would put '^' second in the (|) list, as less often true, for speed.
Hi, I found out this works by trying it out. Good point about the ^ in the second part and especially the ,,, or more situation. I hadn't thought of that...Smilie . I also realized that looking for ␠* is less efficient than ␠␠*. So I think the best option is to run twice, not by piping , but by using a loop and leaving the g flag in (out is less efficient):
Code:
sed ':a;s/\(,\|^\)  *\(,\|$\)/\1\2/g;ta'

or GNU sed.
Code:
sed -r ':a;s/(,|^)  *(,|$)/\1\2/g;ta'

or some older seds:
Code:
sed -e ':a' -e 's/\(,\|^\)  *\(,\|$\)/\1\2/g;ta'

of course every space can be replaced by [ \t] if the need arises.

Last edited by Scrutinizer; 10-31-2010 at 07:38 PM.. Reason: The g flag was missing from the middle (sed -r ) solution
# 12  
Old 10-31-2010
Quote:
Originally Posted by Scrutinizer
Hi, I found out this works by trying it out. Good point about the ^ in the second part and especially the ,,, or more situation. I hadn't thought of that...Smilie . I also realized that looking for ␠* is less efficient than ␠␠*. So I think the best option is to run twice, not by piping , but by using a loop and leaving the g flag in (out is less efficient):
Code:
sed ':a;s/\(,\|^\)  *\(,\|$\)/\1\2/g;ta'

or GNU sed.
Code:
sed -r ':a;s/(,|^)  *(,|$)/\1\2/;ta'

or some older seds:
Code:
sed -e ':a' -e 's/\(,\|^\)  *\(,\|$\)/\1\2/g;ta'

of course every space can be replaced by [ \t] if the need arises.
I am sorry but I dont agree some ideas with you and DGPickett
whats happening there?

I say if there is even other chars (expect null character ) in between pattern match then there is no diffrerent use twice in this example.
because we search spaces or tabs in between two commas..
Code:
[root@rhnserver ~]# cat file1
 
 ,1234,
,123344,
1
, ,
,  ,
,BBB,
,BBB ,
, BBB ,
,  BBB  ,

Code:
[root@rhnserver ~]# sed 's/,[0-9]*,/CHANGE/g' file1
 
CHANGE
CHANGE
1
, ,
, ,
,BBB,
,BBB ,
, BBB ,
, BBB ,

Code:
[root@rhnserver ~]# sed 's/,[0-9][0-9]*,/CHANGE/g' file1
 
CHANGE
CHANGE
1
, ,
, ,
,BBB,
,BBB ,
, BBB ,
, BBB ,


well, when we search single pattern or probably if there are matched unwanted strings for ex contain just numbers then get wrong results
Code:
[root@rhnserver ~]# cat file1
 
 
,1234,
,123344,
1
, ,
,  ,
,BBB,
,BBB ,
, BBB ,
,  BBB  ,

Code:
[root@rhnserver ~]# sed 's/[0-9][0-9]*/CHANGE/g' file1
 
 ,CHANGE,
,CHANGE,
CHANGE
,,
, ,
,  ,
,BBB,
,BBB ,
, BBB ,
,  BBB  ,

Code:
[root@rhnserver ~]# sed 's/[0-9]*/CHANGE/g' file1  --> wrong we must use twice for correct results
CHANGE
CHANGE CHANGE,CHANGE,CHANGE CHANGE
CHANGE,CHANGE,CHANGE
CHANGE
CHANGE,CHANGE,CHANGE
CHANGE,CHANGE CHANGE,CHANGE
CHANGE,CHANGE CHANGE CHANGE,CHANGE
CHANGE,CHANGEBCHANGEBCHANGEBCHANGE,CHANGE
CHANGE,CHANGEBCHANGEBCHANGEBCHANGE CHANGE,CHANGE
CHANGE,CHANGE CHANGEBCHANGEBCHANGEBCHANGE CHANGE,CHANGE
CHANGE,CHANGE CHANGE CHANGEBCHANGEBCHANGEBCHANGE CHANGE CHANGE,CHANGE
CHANGE

or

Code:
[root@rhnserver ~]# sed 's/,[0-9][0-9]*/CHANGE/g' file1
 
 CHANGE,
CHANGE,
1
,,
, ,
,  ,
,BBB,
,BBB ,
, BBB ,
,  BBB  ,

Code:
[root@rhnserver ~]# sed 's/,[0-9]*/CHANGE/g' file1
 CHANGECHANGE
CHANGECHANGE
1
CHANGECHANGE
CHANGE CHANGE
CHANGE  CHANGE
CHANGEBBBCHANGE
CHANGEBBB CHANGE
CHANGE BBB CHANGE
CHANGE  BBB  CHANGE

or

one difference state because matched string + null + string
and we dont want this

Code:
[root@rhnserver ~]# cat file1
 
 ,1234,
,123344,
1
,,   ----> we dont this
, ,
,  ,
,BBB,
,BBB ,
, BBB ,
,  BBB  ,


Code:
[root@rhnserver ~]# sed 's/,[0-9]*,/CHANGE/g' file1
 
 CHANGE
CHANGE
1
CHANGE  --> change
, ,
,  ,
,BBB,
,BBB ,
, BBB ,
,  BBB  ,

Code:
[root@rhnserver ~]# sed 's/,[0-9][0-9]*,/CHANGE/g' file1
 
 CHANGE
CHANGE
1
,,  --> no change
, ,
,  ,
,BBB,
,BBB ,
, BBB ,
,  BBB  ,


regards
ygemici
# 13  
Old 10-31-2010
@ygemici, your input samples do not reflect what DGPickett and I were talking about. Compare this:
Code:
$ echo '  ,          abc,             ,sd ,      ,   ,     ' | sed 's/,[0-9]*,/CHANGE/g'
  ,          abc,             ,sd ,      ,   ,
$ echo '  ,          abc,             ,sd ,      ,   ,     ' | sed 's/,[0-9]*,/CHANGE/g'
  ,          abc,             ,sd ,      ,   ,

with this:

Code:
$  echo '  ,          abc,             ,sd ,      ,   ,     ' |sed -r ':a;s/(,|^)  *(,|$)/\1\2/;ta'
,          abc,,sd ,,,

Without the loop the solution would be incomplete and we would end up with this:
Code:
$ echo '  ,          abc,             ,sd ,      ,   ,     ' |sed -r 's/(,|^)  *(,|$)/\1\2/'
,          abc,             ,sd ,      ,   ,

Which is what DGPickett was talking about.
# 14  
Old 10-31-2010
i was mentioned already issue twice examples to in here what question Smilie
and i think in this loop is unnecessary of course as you wish Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Editing files with sed or something similar

{ "AFafa": "FAFA","AFafa": "FAFA" "baseball":"soccer","wrestling":"dancing" "rhinos":"crocodiles","roles":"foodchain" } I need to insert a new line before the closing brackets "}" so that the final output looks like this: { "AFafa": "FAFA","AFafa": "FAFA"... (6 Replies)
Discussion started by: SkySmart
6 Replies

2. Shell Programming and Scripting

editing file with awk cut and sed

HI All, I am new to unix. I have a file would like to do some editing by using awk, cut and sed. Could anyone help? This file contain 100 lines. There are one line for example: 2,"102343454",5060,"579668","579668","579668","SIP",,,"825922","035885221283026",1,268,"00:59:00.782 APR 17... (2 Replies)
Discussion started by: mimilaw
2 Replies

3. UNIX for Dummies Questions & Answers

sed help finding and editing

With sed 1. I need to find a line that contains "DVM" and "73069". 2. I need to insert a double quote at the beginning of the first line of the file. These two have been driving me crazy for the last 45 minutes. Any help would be greatly appreciated. Thanks (3 Replies)
Discussion started by: nlassiter
3 Replies

4. UNIX for Dummies Questions & Answers

sed editing help....

Hello all, I need some help with sed. seems like i cant get through it. So here is what i am trying. when i do ps -ef|grep bla blah ...like below...i get /u01/app/oracle/11g/bin/tnslsnr .... but i want to replace that string with something using sed. So basically i want to get rid of... (3 Replies)
Discussion started by: abdul.irfan2
3 Replies

5. Shell Programming and Scripting

Line/Variable Editing for Awk sed Cut

Hello, i have a file, i open the file and read the line, i want to get the first item in the csv file and also teh third+6 item and wirte it to a new csv file. only problem is that using echo it takes TOO LONG: please help a newbie. below is my code: WorkingDir=$1 FileName=`cut -d ',' -f... (2 Replies)
Discussion started by: limamichelle
2 Replies

6. Shell Programming and Scripting

Comparison and editing of files using awk.(And also a possible bug in awk for loop?)

I have two files which I would like to compare and then manipulate in a way. File1: pictures.txt 1.1 1.3 dance.txt 1.2 1.4 treehouse.txt 1.3 1.5 File2: pictures.txt 1.5 ref2313 1.4 ref2345 1.3 ref5432 1.2 ref4244 dance.txt 1.6 ref2342 1.5 ref2352 1.4 ref0695 1.3 ref5738 1.2... (1 Reply)
Discussion started by: linuxkid
1 Replies

7. Shell Programming and Scripting

problem in using sed command in editing a file

Hi all, I have a conf file, i want to update some entries in that conf file. Below is the code for that using a temporary file. sed '/workgroup=/ c\workgroup=Workgroup' /usr/local/netx.conf > /usr/local/netx.conf.tmp mv -f /usr/local/netx.conf.tmp /usr/local/netx.conf Sample contents of... (9 Replies)
Discussion started by: ranj14r
9 Replies

8. Homework & Coursework Questions

String editing using sed? awk?

1. The problem statement, all variables and given/known data: Problem Statement for project: When an account is created on the CS Unix network, a public html directory is created in the account's home directory. A default web page is put into that directory. Some users replace or... (13 Replies)
Discussion started by: peage1475
13 Replies

9. Shell Programming and Scripting

Editing Commas in a textfile using sed

Hi guys task removing the last commas of 5th and 6th columns. The bug in the script is causing effect because of whitespaces around commas. I tried to delete white spaces first and running the above script. but still some where getting the results wrong. I already have a script to do this... (12 Replies)
Discussion started by: repinementer
12 Replies

10. Shell Programming and Scripting

Editing File using awk/sed

Hello Awk Gurus, Can anyone of you help me with the below problem. I have got a file having data in below format pmFaultyTransportBlocks ----------------------- 9842993 pmFrmNoOfDiscRachFrames ----------------------- NULL pmNoRecRandomAccSuccess -----------------------... (4 Replies)
Discussion started by: Mohammed
4 Replies
Login or Register to Ask a Question