2017-07-13 24 views
0

我想反转文件名[email protected]的组件。文件名反转字符串组件

这个sed命令做它的字符串:

$ echo [email protected] | sed 's/\<\([-_a-zA-Z0-9]*\)@\([-_a-zA-Z0-9]*\)\>/\[email protected]\1/' 
    [email protected] 

但传递模式rename(女士prename AKA perl的重命名)简化版,导致文件被重命名(虽然退出状态是0)

rename 's/\<\([-_a-zA-Z0-9]*\)@\([-_a-zA-Z0-9]*\)\>/\[email protected]\1/' [email protected] 

我做错了什么?

回答

1

sedperl具有非常不同的正则表达式语法和功能。这就是你可能会寻找

$ rename -n 's/\b([-_a-zA-Z0-9]*)\@([-_a-zA-Z0-9]*)\b/$2\@$1/' [email protected] 
rename([email protected], [email protected]) 
  • \b是单词边界
  • 捕获组
  • $1$2在替换部分反向引用,不\1\2()不应该逃脱etc
  • @需要逃脱,因为它是用于阵列
  • -n选项为空运