我想解析一个完全有效的LaTeX文档,但是当涉及空格,制表符和换行符时可能会被扰乱。因为LaTeX文件中的所有元素都以反斜杠开头,所以我希望在每个反斜杠之前插入一个新的换行符,并将其后面的内容全部放在一行中,直到出现下一个反斜杠。我试过这个:
cat "$1" | tr -d '\n' | sed 's/\t* *\\/\n\\/g'
现在可悲的是,这不起作用。更具体一点:sed命令不起作用,我不太明白为什么。
PS:我在OSX上,并且喜欢适用于Linux和OSX的解决方案。答案 0 :(得分:1)
这不起作用,因为您需要使用引号'
来为sed提供模式。这些引号可以防止bash用实际的换行符替换\n
。
如果你真的想做你正在描述的事情,tr
和sed
你应该在命令中引入真正的换行符:
cat "$1" | tr -d '\n' | sed 's/\t* *\\/\
\\/g'
另一种方法是,如果使用bash
,则使用类似ANSI C的引用($'string'
),其中只替换转义序列(但您仍需要转义\
你介绍的新行):
cat "$1" | tr -d '\n' | sed 's/\t* *\\/\'$'\n''\\/g'
有关quoting with bash的详细信息,请参阅此Wiki页面。
如果你真的想要替换任何空格(标签和空格的混合),后跟任意数量的\
一个新行和相同数量的\
,你可以尝试这个命令:
cat "$1" | tr -d '\n' | sed 's/[[:space:]]*\(\\\\*\)/\'$'\n''\1/g'
[[:space:]]
\
(转义)和任意数量的其他\
(转义)\1
但是,正如您对问题的评论中所建议的那样,这可能不是您真正想要纠正的Latex文档(但这可能是另一个问题)。