Link to home
Start Free TrialLog in
Avatar of vage78
vage78Flag for Greece

asked on

I want to make a shell script (bourne)

I want to make a script in order to strip the last spaces of ever line of my file
for example I have:
jjj@hotmail.com_ _ _ _ _ _
kk23@hotmail.com_ _ _ _ _
luuu78a@hotmail.com_ _ _
and I would like to have as result the following:
jjj@hotmail.com
kk23@hotmail.com
luuu78a@hotmail.com
ASKER CERTIFIED SOLUTION
Avatar of sunnycoder
sunnycoder
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of vage78

ASKER

Hi  sunnycoder
Can you please explaine me the parameters of your command?
Thank you
sed -e 's/ *$//' input_file
          ^    ^
search and replace: all space characters at the end of the line with NULL ... this is simple sed syntax
Avatar of vage78

ASKER

Hi sunnycoder
I forgot to tell you that The character I wrote with the sign _ is
space character. I don't know if this would change your command
I knew that
sed -e 's/ *$//' input_file
             ^ this is space char here
Avatar of vage78

ASKER

In order to reconfirm what we said
1)I want to cutt of the spaces which exist an at every line at the last positions of every line (after every email address)
2)What exactly does *$
3) why you are using mv -f output_file input_file

I suggest you try running the script

1)I want to cutt of the spaces which exist an at every line at the last positions of every line (after every email address) --- this is what the script does
2)What exactly does *$
it means all instances of space followed by end of line
3) why you are using mv -f output_file input_file
sed will produce output /edited file to stdout .. we redirect it to another file and then replace input file with it
Avatar of Tintin
Tintin

Hi vage78.

Perhaps I can clarify some of your questions about sunnycoder's solution.

Where, sunnycoder wrote:

sed -e 's/ *$//' input_file > output_file
mv -f output_file input_file


I would write it as

sed 's/ *$//' input_file >output_file  && mv output_file input_file

The -e option on sed is not needed if you are just doing a single replacement and the -f flag on mv is not needed either.

So the sed regular expression translates to:

' *' - means match zero or more spaces
'$' - means match the end of the line

so putting it together, it is matching zero or more spaces to the end of the line.  This is then replaced with nothing, effectively deleting them.



HI
I think below swd command will give you the desired output
sed 's/ .*$//g' inputfile >output file

Regards
 sagar

           
sagar24.

Your solution won't work as it will match the first space and delete everything up to the end of the line.