使用 sed 的简单行连接问题

使用 sed 的简单行连接问题

我有一个包含数据集名称和日期/时间的大文件:

ss:Type="String">EDII.HA5274.FNS99R.R999999.LFN5913.G1795V00</Data>
ss:Type="DateTime">2022-12-28T00:00:00.000</Data>
ss:Type="DateTime">1899-12-31T23:50:14.000</Data>
ss:Type="String">EDII.HA5273.FNS9901R.R999999.LFN5913.G1796V00</Data>
ss:Type="DateTime">2022-12-29T00:00:00.000</Data>also,
ss:Type="DateTime">1899-12-31T23:43:35.000</Data>

我想连接单词“String”后面的行。

我的最终结果是:

ss:Type="String">EDII.HA5274.FNS99R.R999999.LFN5913.G1795V00</Data>ss:Type="DateTime">2022-12- 28T00:00:00.000</Data>
ss:Type="DateTime">1899-12-31T23:50:14.000</Data>
ss:Type="String">EDII.HA5273.FNS9901R.R999999.LFN5913.G1796V00</Data>ss:Type="DateTime">2022- -29T00:00:00.000</Data>
ss:Type="DateTime">1899-12-31T23:43:35.000</Data>

我的解决方案:

cat The_File.txt| sed 's/\(^.*String.*$\)\r\n/\1/g'

什么也没做。 “\r\n”是正确的 eol 字符。我可以在我的文本编辑器中看到它们。

我现在被困住了..

任何的意见都将会有帮助。另外...我的解决方案有什么问题吗?

谢谢

答案1

我会用。如果该行包含“String”,则打印它而不使用换行符,否则使用换行符。

awk '
    BEGIN {FS = "\""; RS = "\r\n"}
    {printf "%s%s", $0, $2 == "String" ? "" : RS}
' The_File.txt

答案2

默认情况下,sed 一次加载并处理一行。

要使其加载第二行,您可以使用该N指令。然后,您可以用空字符串(或您选择的其他连接字符串)替换行结束字符。

所以

sed '/"String"/{N;s/\r\n//;}' TheFile.txt

答案3

这适用于 MacO:

gsed '/String/{N;s/\r\n//}'

这适用于 Windows 机器上的 Cygwin bash,也适用于 Linux 机器:

sed '/"String"/{N;s/\r\n//;}' 

相关内容