隔断线和空格
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
tr
和 sed
:
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
在文件 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
tr
和 sed
:
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