我有一个带有以下文字的文件,我想在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
任何接受\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.
当文件中的每一行都有S.
组合时,您可以使用非贪婪模式
grep -oP ".*?S[.]" file
如果可以有不同的行,则需要添加替代行
grep -oP ".*?S[.]|.*" file
如果d
文件中的数据,尝试gnu sed:
sed -E 's/S\./&\n/g' d