隔断线和空格

breaklines and blank spaces

在文件 shell 中我有以下内容:

看起来像:

BCTS1
                             ,07/09/2021                    ,
        09:06:26                      ,09:09:26                      ,
        0 horas con 3 minutos

我希望它看起来像:

BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

几个分界线和空格。

有人可以帮忙吗?

鉴于:

cat file
BCTS1
                ,07/09/2021                    ,
    09:06:26                      ,09:09:26                      ,
    0 horas con 3 minutos

你的最简单替换是用 Perl:

perl -0777 -pe 's/\s*,\s*/,/g' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

或者,您可以使用 cat trsed:

cat file | tr -d '\n' | sed 's/[[:space:]]*,[[:space:]]*/,/g'
# same output

或使用任何 POSIX awk:

cat file | tr -d '\n' | awk '{gsub(/[[:space:]]*,[[:space:]]*/,",")} 1'

使用 GNU sed:

sed -Ez 's/\s*,\s*/,/g' file

使用任何 POSIX awk

$ awk -v RS= -F'[[:space:]]*,[[:space:]]*' -v OFS=',' '{=}1' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

如果您没有 POSIX awk(对于 [:space:] 字符 class),则:

$ awk -v RS= -F'[ \t\n]*,[ \t\n]*' -v OFS=',' '{=}1' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

以上假定,就像您发布的示例一样,您的输入中没有任何空行。如果这样做,则可以将其与 GNU awk 一起使用(对于多字符 RS 和 \s shorthand):

$ awk -v RS='^$' -v ORS= -F'\s*,\s*' -v OFS=',' '{=}1' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos

或任何 awk:

$ awk '{r=r [=13=] OFS} END{[=13=]=r; gsub(/[ \t]*,[ \t]*/,","); print}' file
BCTS1,07/09/2021,09:06:26,09:09:26,0 horas con 3 minutos