查找模式并在前面插入换行符
Find pattern and insert a line break in front
我想解析一个完全有效的 LaTeX 文档,但在涉及空格、制表符和换行符时可能会被打乱。因为 LaTeX 文件中的所有元素都以反斜杠开头,所以我想在每个反斜杠之前插入一个新的换行符,并将其后面的内容全部排成一行,直到出现下一个反斜杠。我试过这个:
cat "" | tr -d '\n' | sed 's/\t* *\/\n\/g'
- 读取文件
- 删除所有换行符(让所有内容都在一行中)
- 查找所有出现的反斜杠前面有任意给定数量的制表符和空格。用换行符和反斜杠替换它们
现在遗憾的是这不起作用。更具体地说:sed 命令不起作用,我不太明白为什么。
PS:我在 OSX 上,希望有一个适用于 Linux 和 OSX 的解决方案。
这不起作用,因为您需要使用引号 '
来为 sed 提供模式。这些引号阻止 bash 用实际的换行符替换 \n
。
如果你真的想做你描述的事情,使用 tr
和 sed
你应该在你的命令中引入一个真正的换行符:
cat "" | tr -d '\n' | sed 's/\t* *\/\
\/g'
另一种方法,如果您使用 bash
,是使用类似 ANSI C 的引号 ($'string'
),其中只替换转义序列(但您仍然需要转义 \
你介绍的新线路):
cat "" | tr -d '\n' | sed 's/\t* *\/\'$'\n''\/g'
有关 quoting with bash 的更多详细信息,请参阅此 wiki 页面。
如果你真的想用一个新行和相同数量的 \
,你可以试试这个命令:
cat "" | tr -d '\n' | sed 's/[[:space:]]*\(\\*\)/\'$'\n''/g'
- 来自 class
[[:space:]]
的任意数量的字符
- 后跟一个
\
(转义)和任意数量的另一个 \
(转义)
- 最后一组由转义括号捕获
- 由于
,捕获的组在替换中打印
但是,正如您的问题的评论中所建议的那样,这可能不是您真正想要更正 Latex 文档的方法(但这可能是另一个问题)。
我想解析一个完全有效的 LaTeX 文档,但在涉及空格、制表符和换行符时可能会被打乱。因为 LaTeX 文件中的所有元素都以反斜杠开头,所以我想在每个反斜杠之前插入一个新的换行符,并将其后面的内容全部排成一行,直到出现下一个反斜杠。我试过这个:
cat "" | tr -d '\n' | sed 's/\t* *\/\n\/g'
- 读取文件
- 删除所有换行符(让所有内容都在一行中)
- 查找所有出现的反斜杠前面有任意给定数量的制表符和空格。用换行符和反斜杠替换它们
现在遗憾的是这不起作用。更具体地说:sed 命令不起作用,我不太明白为什么。
PS:我在 OSX 上,希望有一个适用于 Linux 和 OSX 的解决方案。
这不起作用,因为您需要使用引号 '
来为 sed 提供模式。这些引号阻止 bash 用实际的换行符替换 \n
。
如果你真的想做你描述的事情,使用 tr
和 sed
你应该在你的命令中引入一个真正的换行符:
cat "" | tr -d '\n' | sed 's/\t* *\/\
\/g'
另一种方法,如果您使用 bash
,是使用类似 ANSI C 的引号 ($'string'
),其中只替换转义序列(但您仍然需要转义 \
你介绍的新线路):
cat "" | tr -d '\n' | sed 's/\t* *\/\'$'\n''\/g'
有关 quoting with bash 的更多详细信息,请参阅此 wiki 页面。
如果你真的想用一个新行和相同数量的 \
,你可以试试这个命令:
cat "" | tr -d '\n' | sed 's/[[:space:]]*\(\\*\)/\'$'\n''/g'
- 来自 class
[[:space:]]
的任意数量的字符
- 后跟一个
\
(转义)和任意数量的另一个\
(转义) - 最后一组由转义括号捕获
- 由于
但是,正如您的问题的评论中所建议的那样,这可能不是您真正想要更正 Latex 文档的方法(但这可能是另一个问题)。