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