【发布时间】:2015-06-05 11:33:50
【问题描述】:
上一个问题的继续 Sed on Mac not recognizing regular expressions
我正在编辑和清理多个文本文件,准备将它们输入到另一个软件中。我无法让 Sed 处理实际的正则表达式:
我知道这些是不正确的,但我能最接近地描述我感兴趣的代码。请将两行代码与输入和输出进行比较。
非常感谢任何帮助。
-
去掉行首的所有数字:
find . -type f -name '*.txt' -exec sed -i '' '/^$/{N; s/\n[0-9]+/\n/;}' {} + -
格式化文件:
find . -type f -name '*.txt' -exec sed -i '' '/^$/{N; s/([^\n]+)\nACROSS\n/<ACROSS PUZZLE>\n<TITLE>\n\1\n<AUTHOR>\n\n<COPYRIGHT>\n\n<SIZE>\n15x15\n<GRID>\n<ACROSS>\n/;}' {} + -
任何时候有两个或多个下划线,只替换为三个
find . -type f -name '*.txt' -exec sed -i '' '/^$/{N; s/\_\_+/\_\_\_/;}' {} + -
如果点之间有省略号,请删除空格:
find . -type f -name '*.txt' -exec sed -i '' '/^$/{N; s/\. \. \.+/\.\.\./;}' {} +
输入:
nxd-12345678 Serial number of file
Title of File
ACROSS
1 __ fast
2 IRS-form experts
10 Lend. . .
12 Deals with adversity
输出:
nxd-12345678 Serial number of file
<ACROSS PUZZLE>
<TITLE>
Title of File
<AUTHOR>
<COPYRIGHT>
<SIZE>
15x15
<GRID>
<ACROSS>
___ fast
IRS-form experts
Lend...
Deals with adversity
【问题讨论】:
-
标题总是在第二行吗? ACROSS 会一直出现在第三行吗?其余的都是直截了当的。
-
我很惊讶还没有人知道你 - sed 总是不适合做任何跨越多行的事情。您应该使用 awk。
-
编辑。不,没有人这样做。我是前端开发人员,所以我只有这样的基本知识。我的知识主要限于 PHP 之类的东西。我对命令行技能没有太多用处。但我能够回答我所有的问题。我最终完成的这个脚本将几个不同的任务组合成一个脚本。在准备一堆文件时节省大量时间,在此脚本之前,这些文件需要大量手动处理数据,以便为最终目的地做好准备。