你好,我正在尝试删除/
.我遇到的问题如下所示,找到.sh
当前文件夹中具有扩展名的所有文件,然后删除./
名称之前和.sh
名称之后的文件,这必须位于具有.sh
我命名的扩展名的文件中find_sh.sh
。我已经尝试过,find . -name '*.sh' -print | sed 's/[.]//g' | sed 's/[/]//g' | sed 's/.sh//g'
但这也会删除_
.我做错了什么?
答案1
我已经这样做了,它有效find . -name '*.sh' -print | sed 's/[.]//g' | sed 's/[/]//g' | sed 's/sh//'
并且有效。
答案2
在您的模式中.
匹配任何字符,而不仅仅是文字点。您需要使用反斜杠对其进行转义以防止这种情况发生。你的其他解决方案另一方面,删除文件名中的所有点,即a.b.sh
变为ab
.我提出以下替代方案:
find . -name '*.sh' | sed 's,^./,,g' | sed 's/.sh$//'
请注意^
哪个与行的开头匹配,$
哪个与行尾匹配。
但最好只使用一个sed
命令:
find . -name '*.sh' | sed 's,^./\(.*\).sh$,\1,'