我正在与gnu-sed合作,我发现了以下内容:
sed -r 's|((https?://)?(www\.)?)example\.com\.au|\1|gi' test.txt如果没有-i,这将很好地工作,并与test.txt中的下面一行相匹配
https://www.example.com.au但是,如果我添加了-i,我需要避开几乎所有的东西(,甚至问号)才能获得相同的结果。最后看起来是这样:
sed -ir 's|\(\(https\?://\)\?\(www\.\)\?\)example\.com\.au|\1|gi' test.txt
#COMP:sed -r 's|((https?://)?(www\.)?)example\.com\.au|\1|gi' test.txt这更丑..。我不喜欢这样
我在man sed中找不到任何东西来解释这一点。
,为什么会发生这种情况,有什么办法可以避免吗?
发布于 2015-06-30 13:06:41
文档的一个简短的节选
-i[SUFFIX]--in-place[=SUFFIX]此选项指定要就地编辑文件.
当你写:
sed -ir '...'sed将命令行解释为-i,后跟用于备份文件的后缀(在上面的节选中显示的简短形式)。
因此,它不再看到-r选项,而是将最后一个参数解释为基本的regex,而不是扩展的regex。正如同一文档页所述,"Extended .可能更清楚,因为它们通常有较少的反斜杠“。
解决方案非常简单:单独添加-i命令行选项,不要将其与-r结合
sed -i -r 's|((https?://)?(www\.)?)example\.com\.au|\1|gi'(不能组合具有参数的命令行选项。)
发布于 2015-06-30 13:01:11
这是因为-i选项需要一个文件参数。如果将参数切换到-ri,就会看到错误。让它像-ir告诉sed从文件r读取,因此它不使用使用-r选项启用的扩展regex选项。
https://stackoverflow.com/questions/31138909
复制相似问题