如何在特定字符串后插入换行符?

问题描述 投票:1回答:3

我有一个带有以下文字的文件,我想在S.字符之后做一个换行符

我有这个

1900-01-01 00:00:00|1|S|S|S|S.1900-01-01|S.1900-01-01 00:00:00|1|S|S|S|S.1900-01-01 00:00:00|1|S|S|S|S.

我想要

1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

我试过这个

$ sed 's/S./\n/g' file.csv > file2.csv
unix awk sed terminal scripting
3个回答
3
投票

任何接受\n作为“换行符”意思的sed:

$ sed 's/S\./&\n/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

或者在bash中为$'\n'获取换行符:

$ sed 's/S\./&\'$'\n''/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

或任何shell中的任何sed可移植:

$ sed 's/S\./&\
/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

请注意,输出将以空行结束,因为脚本会根据请求在每个S.之后添加换行符。如果你实际上只想在每个S.中线之后添加一个换行符那么那就是:

$ sed 's/\(S\.\)\(.\)/\1\n\2/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

1
投票

当文件中的每一行都有S.组合时,您可以使用非贪婪模式

grep -oP ".*?S[.]" file

如果可以有不同的行,则需要添加替代行

grep -oP ".*?S[.]|.*" file

0
投票

如果d文件中的数据,尝试gnu sed:

sed -E 's/S\./&\n/g' d
© www.soinside.com 2019 - 2024. All rights reserved.