ファイル名に特定の(既知の)拡張子がある場合は削除します。

ファイル名に特定の(既知の)拡張子がある場合は削除します。

grep単一のデータ行で正規表現を使用したいかどうかはわかりません。インターネット検索で、grepすべての.extファイルと一致し、デフォルト名を返す次の予測式が見つかりました。

XX@XX:/$ echo name.ext | grep -oP [^\.]+(?=.ext)
name

これはうまく機能しますが、ユーザーにファイルを保存するように求められますので、拡張子を付けて名前を入力するかどうかはわかりません。すべての名前が一致することを確認しながら、プレビューを条件付きに設定してみましたが、理解できない結果が返されました。

XX@XX:/$ echo name.ext | grep -oP "[^\.]+(?=.ext)?"
name
ext

拡張子を省略すると動作します。

XX@XX:/$ echo name | grep -oP "[^\.]+(?=.ext)?"
name

もしそうなら、これはgrep問題か正規表現問題ですか?どういうわけかプレビューをキャプチャしないようにする必要がありますか?

ベストアンサー1

POSIXシェル置換を使用して、以下を削除できます.ext

file='name.ext'
printf '%s\n' "${file%.ext}"

拡張自由文字列を新しい変数に割り当てるには、次のようにします。

noext="${file%.ext}"

おすすめ記事