繁体   English   中英

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

[英]how to insert line break after a specific string?

我有一个包含以下文本的文件,我想在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.

或以$'\\n' bash以获取换行符:

$ 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.

或与任何外壳中的任何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

在 windows 下的 git bash 中,这个:

 sed 's/S\./S\.\n/g' input-file // replace 'S.' with 'S.new-line'

完美地工作。 我用它来重新格式化一些文本文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM