ファイル名から文字列を削除します

ファイル名から文字列を削除します

www.thethinkfoundation.org次のような行で終わるテキスト ファイルがいくつかあります。

file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.

file100.www.thethinkfoundation.org.txt

削除したいwww.thethinkfoundation.org

これを実現するために、ターミナルで次のコマンドを試しました。

for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done

結果は次のとおりです。

file1..txt
file2..txt
.
.
.

file100..txt

有効な解決策を事前にお知らせいただきありがとうございます。

PS: コマンドは使いたくありませんrename。実際、Linux と *BSD ディストリビューションで動作するコマンドを探しています。私が好むテキスト エディターは ですnano

答え1

部分文字列の置換はシェルパラメータの拡張bashおよびその他のいくつかのシェルでも、次の 2 つの方法で実現できます。

初めを置き換えることができます最初の出現のみ左から右へ) のパターンは次のようになります。

${var/pattern/replacement}

2番を置き換えることができますすべての出現次のようなパターンです:

${var//pattern/replacement}

var文字列を含む変数/パラメータで、patternは文字列内で検索して置換するパターンで、replacementはそれを置き換える置換で、文字列からそのパターンを削除するだけのpattern場合は空のままにすることもできます${var//pattern/}

したがって、望ましい解決策は次のようになります。

for f in *www.thethinkfoundation.org*; do
    echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done

最初にテストしてから取り出して再度実行し、実際の作業が行えるように、echoドライランを追加しました。echo

関連情報