My files are of the format
Country, City S1.txt
e.g.
USA, Los Angeles S1.txt
USA, San Francisco S3.txt
UK, Glouchester S4.txt
Argentina, Buenos Aires S7.txt
I wish to change them to
Country_City_S1.txt
e.g.
USA_Los_Angeles_S1.txt
USA_San_Franciso_S3.txt
UK_Glouchester_S4.txt
Argentina_Buenos_Aires_S7.txt
To remove the comma I use the following sed command:
sed -i 's/,//g'
To replace the whitespaces with underscore, I use the following sed command:
sed -i 's/ /_/g'
Question: Is there a way to combine the above two commands into one? Or is there a neater way to accomplish the above?
Notes:
I have changed the title of my original post to better reflect what I need to be done. I am sorry for any confusion caused as a result of the change.
I understand now what I need, which is a bash script and not sed to change filenames.
I thank all those who have replied with their suggested sed commands.
I prefer to use the mv command in a bash script as in for example *for f in .txt; do mv .......; done
CodePudding user response:
Merge your two sed
expressions:
sed 's/,//g; s/ /_/g'
CodePudding user response:
Replace any combination of spaces and commas with a single underscore:
sed -E 's/[, ] /_/g'
See live demo.
CodePudding user response:
This might work for you (GNU sed):
sed 's/,//g;y/ /_/' file
Remove commas and translate spaces to underscores.
Or perhaps:
sed -E s/,? /_/g' file
To rename file names, perhaps:
sed -E 'h;s/,? /g;H;g;s/(.*)\n(.*)/mv "\1" "\2"/e' <<<"$filename"