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