【发布时间】:2018-03-22 14:22:32
【问题描述】:
这可能是 Sed 和 shell 脚本语法问题以及 Regex。
(编辑:可能是 I/O 问题,因为在 bash shell 中读取文件时正则表达式起作用,但实际的 .txt 文件没有按需要更改)
尝试为一些自然语言处理工作准备一个.txt 文件。想要删除包含莎士比亚十四行诗的纯文本文件中的一些罗马数字,每个十四行诗都以罗马数字开头,例如IX. 和XVIII.,代表单个十四行诗的标题,包括十进制字符。
输入文本示例:
二十五。
让那些喜欢自己的明星
以公共荣誉和自豪的头衔夸耀,
期望的输出:
让那些喜欢自己的明星
以公共荣誉和自豪的头衔夸耀,
按照this question 中的示例,我在终端 bash shell 中尝试了以下所有命令:
$ sed -i 's/[IVXLC]{1,}[.]//g' sonnets.txt
$ sed -i 's/[IVXLC]{1,}[.]/^$/g' sonnets.txt
$ sed -i 's/[IVXLC]{1,}[.]/()/g' sonnets.txt
$ sed -i 's/[IVXLC]{1,}[.]/[]/g' sonnets.txt
这个想法是用空字符串替换任何匹配项。由于这不起作用,我尝试用空格字符替换匹配:
$ sed -i 's/[IVXLC]{1,}[.]/^ $/g' sonnets.txt
运气不好。上面的所有命令都返回相同的错误:
sed: 1: "sonnets.txt": unterminated substitute pattern
我在https://regexr.com/ 的“查找”字段中测试了正则表达式,它似乎是正确的。目标文件就在工作目录中。知道出了什么问题吗?我应该在 Sed 命令的“替换”字段中使用哪些字符?我应该修改正则表达式和/或 Sed 命令吗?
【问题讨论】:
-
你能粘贴示例文本吗?输入是什么,你喜欢输出的样子。 ?
-
我认为
{和}需要转义。\{和\}。方括号可能还需要转义不确定。 -
{}[]在regexr.com 上测试时似乎不是问题 -
您是否还需要在 OS X 上为
-i提供文件扩展名?不正确的转义不会导致该错误消息,但我无法测试。 -
请注意,
sed在 Mac 上的版本是 BSD 版本,而不是 GNU 版本。这些行为在很多方面都不同。
标签: regex bash macos shell sed