[英]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.