A melhor ferramenta para algo assim é provavelmente sed , aqui está um exemplo de trabalho usando expressões regulares estendidas:
sed -E 's:^([^ ]*)\s+([^/]*)/([^ ]*)\s+[^ ]*\s*#?\s*(.*):,,,:' file
Ou se sua entrada puder ser delimitada por tabulações:
sed -E 's:^([^[:space:]]*)\s+([^/]*)/([^[:space:]]*)\s+[^[:space:]]*\s*#?\s*(.*):,,,:' file
Saída:
ssh,22,tcp,Secure Shell Login
linuxconf,98,tcp,
tacnews,98,udp,TAC News
Explicação
-
s:::usa dois pontos como o delimitador de expressão -
^([^ ]*)primeiro grupo de captura, sequência de correspondência de caracteres não espaciais no início da linha -
\s+ignora o espaço -
([^/]*)segundo grupo de captura, correspondência até uma barra -
/ignorar barra -
([^ ]*)terceiro grupo de captura, sequência de correspondência de caracteres não espaciais -
\s+ignora o espaço -
[^ ]*ignora o número decimal -
\s*#?\s*ignora o espaço e o hash opcional -
(.*)quarto grupo de captura, o resto da linha