Linuxのシェルは、[予約]名のコメントを変更するバッチファイルを使用する方法のsed

 需要の背景:

APKファイルは、自動生成された店舗パケットに使用されるディレクトリは、我々は今、名前を命名修正パッケージを開発した:環境の名前を(プロ| UAT)-release-日-vバージョンの.apk

オリジナルのアイデアは、表現のマッチングが正によって新しいパッケージ名ですが、シェルスクリプトの正規表現の使用は、私は現在の正規表現は、SHELスクリプトの力であるかを確認するために、理由はまだ明らかではないことが判明しました。

ユニバーサル検索エンジンによって、別の方法を発見した:より簡単に

私は(PythonスクリプトによってAPKタンポポをアップロードする)便利を使用して指定したディレクトリに直接アクセスAPK名と、固定の名前に名前を変更

 

原文件名:

プロリリース-20191220-v2.0.8.apk

[@ルート67 #LSを解除] 
output.jsonプロ -release- 20191220 -V2。0.8の.apk test.sh

スクリプトリアライズ:

APKファイルには、と最後に変更されますnewNameStr

以下のためのファイル lsの`| grepの.apk`
 DO 
 NEWFILE = ' newNameStr ' 
 のMV $ファイル$ newfileコマンドが
行われ

スクリプトの効果:

[ルート@ 67 リリース]#shのtest.sh 
[ルート@ 67 リリース]#lsの
newNameStr output.json test.sh

 

コンテンツの拡張子:

序文

sedのボリュームでファイル名を変更Linuxのシェルについての関連コンテンツを紹介する本論文で、あなたの参照のための株式学習は、以下の詳細な紹介を見てみるために、言ってあまり話をしませんでした。

特定の文字の除去

目標:2017-01-01.jpg、2018-01-01.jpg変更20170101.jpg、20180101.jpg

方法:すべての - 空の置き換え

1
2
3
4
5
for file in ` ls | grep .jpg`
do
  newfile=` echo $ file | sed 's/-//g' `
  mv $ file $newfile
done

標準出力文字列の置き換え、その一般的な形式を使用して、本明細書のsed:

1
stdout | sed 's/pattern/replace/'

上記の例では、すべての発生を置き換えるのではなく、最初の一致を交換するための端部gに加えました。

文字を介在

目標:book01.txt、paper02.txt変更book01.txt、paper02.txt

方法:それぞれのパケットに一致する文字列の両側に位置を取得し、その後、逆参照を置き換えることによって達成

1
2
3
4
5
for file in ` ls | grep .txt`
do
  newfile=` echo $ file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/' `
  mv $ file $newfile
done

分析

前述した第一のgrepコマンドとファイルのリストによって得られたLsが、名前を変更し、sedのコマンド文字列に置き換え、最後にファイル名の変更を完了するために、MVコマンドを使用します。

、findコマンドにより、文字列はまた、我々は以下参照する、直接提供することができます名前を変更するファイルのリストを取得する多くの方法があります。

ループバックのためにそのノート  ls | grep .txt、引用符でこの単一の二カウンタコマンド、  $(ls | grep .txt) 同様の効果がコマンドとして文字列に囲まれ、そしてその結果の文字列を返すであろう。

ファイル名には、スペース・ソリューションが含まれています

私たちは、直接サイクルのためのファイルリストへの書き込みではなく、例えば、コマンドを与えることができます。

1
2
3
4
for file in "file1 file2 file3"
do
  ...
done

ファイル名にスペースが含まれている場合は、変更する、スペースで文字列を分割することで、それはファイル名を複数に分割するので、そのエラーになりますforループを参照してください。

この問題を解決するために、我々はIFS(内部フィールドセパレータ)が改行に設定\ nは、このようれることができ、ループの行は、すべての買収は確かに完全なファイル名であることを保証するために、変数の値を取得するだろう。

変数のIFSコマンドセットは、forループの前に配置する必要があります。

1
2
3
4
5
IFS=$ '\n'
for file in ` ls `
do
  ...
done

読み取りコマンドは、一度変数ファイルの行を読んでいる間も、直接使用することができます:

1
2
3
4
ls | grep "*.txt" | while read file
do
  ...
done

使用して、ファイルリストを取得するために見つけます

前の例では、我々は、lsコマンドでファイルのリストを取得することです。このコマンドは、ディレクトリ内のファイルを取得することができ、かつ様々な条件をスクリーニングすることはできません。

それは、ファイルを探しに来るときそして、あなたは強力なfindコマンドを言及する必要があります。このコマンドは、ディレクトリ内のファイルの複数のレベルで見つけることができ、そしてそのような便利かつ柔軟から特定のファイルを見つける、作成などの時間、ファイルサイズ、所有者のための各種条件を設定することができます。

その後、ファイル名を変更するために正規表現を使用してコマンドをsedは、findコマンドは、ファイルのリストを取得すると、これらの二つのコマンドの組み合わせは、ほぼすべての一般的な一括リネーム作業を行うことができます。

例えば、このような形状book_20170101.txtとして全て1Mよりも大きく、そして接尾辞TXTまたはJPGファイル、image_20170101.jpgファイルは20170101-book.txt、20170101-image.jpg、コードの名前を変更し、以下の通りであります:

1
2
3
4
5
for file in ` find . -size +1M -name "*_*.txt" -o -name "*_*.jpg" `
do
  newfile=` echo $ file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./' `
  mv $ file $newfile
done

、findコマンドの使用方法の詳細は、を参照してください  //www.jb51.net/article/108198.htm

 

参照文献:

詳細sedはLinuxのシェルバッチファイル名の変更を使用する方法

おすすめ

転載: www.cnblogs.com/kaerxifa/p/12072140.html