我已经导出到一个文本文件我的所有文本消息,他们的格式是这样的。
, NAME +18001112222, RECV, Text message contents.
, NAME +18001112222, RECV, Text message contents that are run over to
the line below it.
, NAME +18001112222, SENT, Text message contents that have
multiple lines and empty lines!
, NAME +18001112222, SENT, Text Message contents
我知道如何删除空行。如何使用awk、sed或grep将所有这些不以,
开始的行移动到其上一行的末尾?
或者,您如何重新设置格式,以确保每条文本消息的所有内容都在一行上。
我还没有尝试过任何东西,因为我不确定从哪里开始,这就是为什么我在这里要求更多的实践手,希望提供一些实际的例子,如何去解决这个问题。提前感谢!
6条答案
按热度按时间ybzsozfc1#
与https://stackoverflow.com/a/73030681/10971581的想法相同:
输入似乎是格式错误的CSV。通常会期望包含换行符或字段分隔符(
,
)的字段被引用。请注意,通常不可能确定以
,
开头的行是连续的还是打算开始新的一行。上面的代码假定总是后者。oymdgrw72#
我将利用GNU
AWK
来完成这个任务,如下所示,让file.txt
内容然后
给出输出
说明:我告诉GNU
AWK
行分隔符(RS
)是换行符(\n
)后跟逗号(,
)然后为每一行设置输出行分隔符(ORS
)是当前行终止符(RT
)然后替换所有换行符(\n
),然后Iprint
行,行的后缀是行终止符。vvppvyoh3#
使用GNU
sed
omhiaaxx4#
这可能对你有用(GNU sed):
追加下一行,如果它是空的或者不是以
,
开始,则删除换行符并重新执行。否则,打印/删除第一行并重新执行。注意:当模式空间不为空时,即,从之前剩余填充时,
D
命令禁止用下一行自动补充模式空间。2uluyalo5#
带有
-z
选项的GNUsed
:igetnqfo6#
您可以使用Perl One-Liner(RexEgg解释)。
Here is a demo at regex101或www.example.com上的bash演示tio.run
这会将one or more
\n
* 换行符 * 替换为空格if not followed by和逗号。要防止删除字符串末尾的换行符,请修改 lookahead:
(?!$|,)