Leading and Trailing Spaces

Hi,

how to i remove leading and trailing spaces from a line? the spaces can be behind or in front of any field or line

example of a line in the input data:

Amy Reds ,    100   ,  /bin/sh

how to i get it to be: Amy Read,100,/bin/sh

i saw something on this on the Man pages for AWK but i dont really understand what it was talking about.. could someone help?

thanks

Are you using a shell script or vi to do this?

For a shell script you could use sed like this:

echo "Amy Reds , 100 , /bin/sh" | sed 's/ //g'

In vi it is very similar

:%s/ //g

This assumes you want to do this to every line of the file and also assumes you have spaces, not tabs or other whitespace.

If you can give more specifics I am sure you will get a more specific answer.

thanks for your reply

i am using vi to do this.. i tried sed and it does not give me the output i want.. Amy Reds , 100 , /bin/sh --> would give me an output without any spaces in between

i want to get the output as --> Amy Reds,100,/bin/sh
there is a space between the first name and the last name

i looked at some web pages and AWK seems to be the answer, however i dont know how to use it.

thanks.

Seems like you only want to remove only the spaces either side of a comma. Try...

echo "Amy Reds , 100 , /bin/sh" | sed 's/[ ]*,[ ]*/,/g'

yes Ygor, that almost does it

could you explain what the symbols [ ] and * mean here?

also what if there are spaces in front of and behind the line?

" Amy Reds , 100 , /bin/sh "

thanks

The pattern represents a regular expression

[ ] denotes a range of characters within the bracketed boundary, in this case a single space.

The following * denotes "0 or more occurences".

Thus, the pattern, [ ]* denotes a pattern match for 0 or more spaces. Places either side of a comma they produce the effect of mathcing a comma surrounded by spaces and then converting the matched string to a single comma.

You may also want to check up on the use of [:space:] which essentially matches any whitespace (i.e. tabs also).

To remove spaces either side of a comma and leading/trailing spaces. Try...

sed -e 's/[ ]*,[ ]*/,/g' -e 's/^[ ]*//' -e 's/[ ]*$//' file1

Where...

[ ]* = any number of spaces
^ = beginning of line
$ = end of line

man regexp for more details.

You could also use awk, if you prefer...

awk 'BEGIN{FS=OFS=","}{for(i=1;i<=NF;i++)gsub("(^[ ]*)|([ ]*$)","",$i)};1' file1

Sorry I missed the space in "Amy Reds", looks like Ygor took care of it though.