AIX sed use space as delimiter

I am trying to do this with one small tweak. I would also like to use a space as a delimiter.

sed 's/[,.!?]  */\
/g' file

This is what my file looks like.

server1, server2, server3
server4 server5 server6

I would like it to look like this.

server1
server2
server3
server4 
server5 
server6

This was some of my ideas for a solution.

sed 's/[,.!? ]  */\
/g' file
server1
server2
server3
server4 server5 server6
sed 's/[,.!?  ]  */\
/g' file
server1
server2
server3
server4 server5 server6
sed 's/[,.!? ""]  */\
/g' file
server1
server2
server3
server4 server5 server6
sed 's/[,.!? " "]  */\
/g' file
server1
server2
server3
server4 server5 server6
sed 's/[,.!? '']  */\
/g' file
server1
server2
server3
server4 server5 server6
sed 's/[,.!? ' ']  */\
/g' file
sed: 0602-404 Function s/[,.!?  cannot be parsed.

[RIGHT][/RIGHT]Including a space in the [ ] is okay but there is also (at least) one following space.
So either have

/[,.!? ] */

i.e. a following space is not required; this would also cover

server1,server2,server3

Or have

/[,.!?]\{0,1\}  */

i.e. a [ ] character may occur 0 or 1 times, followed by (at least) one space.

So two spaces vs one space makes a big difference it seems? Do you know why it adds an extra space?

sed 's/[,.!? ]   */\
/g' file
server1
server2
server3
server4 server5 server6

sed 's/[,.!? ] */\
/g' file
server1
server2
server3

server4
server5
server6

Do you know this adds an extra space?

sed 's/[,.!?]\{0,1\}  */\
/g' file
server1
server2
server3

server4
server5
server6

You mean the extra line?
I guess there is a space character after the server3 ; this extra space is converted to an extra newline.

1 Like

This?

printf "%s\n" $( tr -s ' ,.!?' ' ' <file_name)
server1
server2
server3
server4
server5
server6

tr turns all the expected delimiters to spaces and printf prints one per line.

Andrew

In tr the number of characters in arg1 should match the number in arg2 - otherwise the behavior is not possible.
Convert directly to newline:

tr -s ' ,!' '\n\n\n' < filename

Okay, sorry about that. I've gotten used to the GNU tr which does allow that behaviour. Now I've checked with Solaris I see your're right.

Andrew