0

私はこれを少しの間機能させようとしています...この質問は役に立ちましたが、これを機能させるのにまだ苦労しています。これは私が現在実行しているまれなタスクであるため、homebrew をインストールしたくありません。

テキストの文字列、アンダースコア、追加のテキスト、アンダースコア、そして最後に保持したい重要なファイル名を含むファイルが数千あります。*_*_ファイル拡張子を使用して、最初の部分を削除し、最後の部分を保存しようとしてい\(*\)/\1/ます。

いくつかの異なることを試しましたが、元のファイル名が再び吐き出されるだけです。どんな助けでも大歓迎です。-それが正規表現の問題なのか、sedなのか、あるいはおそらく両方の問題なのかはわかりません。

ls | sed 's/^*_*_\(*\)/\1/' > ouput.txt;
ls | sed 's/^*_*_\(*\$\)/\1/' > out.txt
ls | sed 's/\(^*_*_\)\(*\$\)/\2/' > out.txt
ls | sed 's/\(^.*_+.*_+\)\(.*\$\)/mv & \2/' > out.txt
4

2 に答える 2

2

この正規表現はトリックを行いますか?そうでない場合は、出力がどのようにオフになっているか(詳細)を報告してください。調整をお手伝いします。

ls -1 | sed -e 's/^[^_]*_[^_]*_//'

注1:ls -1ファイルを単一の列にフォーマットするために使用することをお勧めします。

注2:上記のアプローチでは、必要な部分を正規表現バッファーに格納しようとするのではなく、ファイル名の不要な部分を削除するだけです。


編集

そして、これが名前変更を実行するbashスクリプトです。

for f in `ls -1`
do
    new_name=`echo "$f" | sed 's/^[^_]*_[^_]*_//'`
    mv "$f" "$new_name"
done

ワンライナーとして書くことができますが、簡潔さよりも明確にするために行きました。

于 2012-09-12T23:47:15.173 に答える
1

command | sed 's;^.*_;;'トリックを行います。findの代わりにコマンドを使用してくださいls

例えば、

 find . -type f | sed 's;^.*_;;' 
于 2012-09-12T23:52:28.230 に答える