2016-03-28 18 views
0

ディレクトリ内のすべてのFortranファイルを検索し、そのファイル内のテキストを置き換えようとしています。ディレクトリ内のすべてのFortranファイルを検索するBashコマンド

最初はfind -regex ... -execを使用して、Fortranコードのファイル拡張子をすべて探して置き換えようと考えていました。しかし、ファイル拡張子がたくさんありますが、Fortranファイルを識別する別の方法はありますか?

+0

なぜFortranファイルの拡張機能がたくさんあるのですか? – Barmar

+2

@Barmar 2つのソース形式があり、大文字のFは前処理の必要性を示します。そして、人々は標準の異なるバージョン( '.f95'、' .f03'のようなナンセンス)を区別しなければならないと考えるので、これは愚かです。私たちが '.java1'' .java2' ... '.java7'を持っているかのように。 –

答えて

2

ここには、すべてのFortran関連ファイルを見つけるための非常に短いfindコマンドがあります。最も一般的なFortranファイルは*.f,*.f90、および大文字の対応ファイルです。さらに、.f95,.f03,.f08、さらには.forが使用されます。 -iregexは、大文字小文字を区別しない正規表現と一致します(-regexとは対照的)。

find . -iregex ".*\.F[0-9]*" -o -iregex ".*\.for" 

これで何かを行うには、xargsを使用することができます。

find . -iregex ".*\.F[0-9]*" -o -iregex ".*\.for" | xargs head -1 

は、ファイルとやりたいものは何でもしてhead -1を交換してください。


ことで動作する別の方法は以下のようなループを使用している:

for file in $(find . -iregex ".*\.F[0-9]*" -o -iregex ".*\.for"); do 
    head -1 "$file" 
done 

これは、あなたxargsアプローチよりも少し柔軟性を提供し、読みやすいです。

+0

出力が非常にシンプルでない場合(空白も特殊文字もない場合)、または単語分割を明示的に行う必要がある場合は、一般的にbashの 'for ... in $(command)'は使用しないでください。いくつかの代替案についてはhttp://stackoverflow.com/a/7039579/3076724を参照してください(いくつかの箇所で 'IFS ='が不足しています) – BroSlow

関連する問題