我有一个包含数据集名称和日期/时间的大文件:
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
我会用awk。如果该行包含“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//;}'