反转文件名中的字符串组件

时间:2017-07-13 14:55:12

标签: regex shell sed rename

我正在尝试反转文件名CREATE UNIQUE NONCLUSTERED INDEX UX_BusinessKey ON CatastropheRegion (CatastropheNumber, RegionCode) 的组件。

这个sed命令在字符串上执行:

foo@bar

但是将模式传递给$ echo foo@bar | sed 's/\<\([-_a-zA-Z0-9]*\)@\([-_a-zA-Z0-9]*\)\>/\2@\1/' bar@foo (名称为AKA perl重命名)不会导致文件被重命名(尽管退出状态为0)

rename

我做错了什么?

1 个答案:

答案 0 :(得分:1)

perl$ rename -n 's/\b([-_a-zA-Z0-9]*)\@([-_a-zA-Z0-9]*)\b/$2\@$1/' foo@bar rename(foo@bar, bar@foo) 具有非常不同的正则表达式语法和功能。这就是你可能正在寻找的东西

\b
  • ()是字边界
  • 捕获群组时不应转义
  • $1
  • $2\1是替换部分的反向引用,而不是\2@
  • -n需要进行转义,因为它用于数组
  • class Super { public: string member = "bla bla"; void doSth() { cout << member; } }; 选项适合干跑