REGEXを使用してスラッシュを削除する方法

REGEXを使用してスラッシュを削除する方法

こんにちは、を削除しようとしています/.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$//'

^どちらが行の先頭と一致し、$どちらが行の終わりと一致するかを確認してください。

ただし、次のコマンドを1つだけ使用することをお勧めしますsed

find . -name '*.sh' | sed 's,^./\(.*\).sh$,\1,'

関連情報