sed和Mac OS X与上部,下部和整个捕获控制序列的差异

Jam*_*son 8 macos sed

我试图从大写的文件名中取出最后两个字母,并将它们以小写形式附加到文件名.我完成了命令:

ls | sed -e "s/.*\([A-Z][A-Z]\)$/\0\/\L\1\E/"
Run Code Online (Sandbox Code Playgroud)

实现这一点,在我的Ubuntu箱它工作得很好,但在我的Mac它简单地打印出一个0/LXXE/地方XX是从捕获正确的字母.

什么是Mac sed等价物\0,\L\E

我已经浏览过网络,有几个人注意到Mac OS X sed与Ubuntu sed有所不同,但是大多数线程都在讨论-i文件扩展名或空字符串的要求(以前曾让我失望).

anu*_*ava 23

OSX(BSD)的sed不支持的功能\L,\E等安装gnu sed使用此选项在Mac上:

brew install gnu-sed
Run Code Online (Sandbox Code Playgroud)

  • `brew install --default-names gnu-sed`安装为`sed`而不是`gsed` (7认同)

msc*_*lli 6

awk 替代方案:

ls | awk '{print $0 tolower(substr($0,length($0)-1,2))}'
Run Code Online (Sandbox Code Playgroud)

  • @PaulR:据我所知,这就是OP想要的:“*...取出最后两个字母[...]并将它们附加...*”。如果您想用小写版本*替换*最后两个字符,请尝试以下操作:`ls | awk '{print substr($0,1,length($0)-2) tolower(substr($0,length($0)-1,2))}'` (2认同)