Raz*_*aza 6 linux text-formatting
我有以下文本,除了引号中的任何内容外,我需要用换行符替换所有空格。
输入
This is an example text with some spaces.
This should be 2nd line.
However the spaces between "quotes should not change".
last line
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
This
is
an
example
text
with
some
spaces.
This
should
be
2nd
line.
However
the
spaces
between
"quotes should not change".
last
line
Run Code Online (Sandbox Code Playgroud)
我尝试使用 awk/sed/perl,但无法弄清楚除了引号之外的其他内容。
引用的文本不会超过一行。
编辑:我的解决方案是完全矫枉过正。我不知道我在想什么。这个问题可以通过一个极其简单的正则表达式来解决。请参阅JJoao提交的解决方案。
Pythonshlex库几乎是开箱即用的。这是一个示例脚本:
#!/usr/bin/env python2
# -*- coding: ascii -*-
"""tokens.py"""
import sys
import shlex
with open(sys.argv[1], 'r') as textfile:
text = ''.join(textfile.readlines())
for token in shlex.split(text, posix=False):
print(token)
Run Code Online (Sandbox Code Playgroud)
如果您的数据在文件中data.txt(例如),那么您可以像这样运行它:
python tokens.py data.txt
Run Code Online (Sandbox Code Playgroud)
这是它产生的输出:
这个 是 一个 例子 文本 和 一些 空间。 这个 应该 是 第二 线。 然而 这 空间 之间 “报价不应改变” . 最后的 线
请注意,它将句点放在单独的行上。这是因为它以结束引号结束标记。由于您提供的示例似乎不需要多行字符串或转义字符,因此滚动您自己的小词法分析器可能并不难。这是我想出的:
This is an example text with some spaces. This should be 2nd line. However the spaces between "quotes should not change" . last line
这将产生您要求的结果。你可以很容易地用另一种语言(比如 Perl)来实现这个算法。我只是碰巧更习惯使用 Python。