フォルダーを繰り返しながら、フォルダー内の同じ名前のファイルを開き、いくつかの操作を実行しています。
私は行を操作するためにsedを使用しています。
sed "1s/Log R Ratio/$SAMPLE.LRR/" $FILE
ここで $FILE は、名前に複数のスペースがあるファイルです。例:
NAT062813_Batch A_1_TR27GD1_CytoScanHD_NL_092913/NAT062813_Batch A_1_TR27GD1_CytoScanHD_NL_092913.txt
このファイルでsedを使用する方法はありますか(ループや名前を変更せずに)? $ FILEの周りに引用符を入れようとしましたが、印刷されます。
ベストアンサー1
あなたの質問をもう一度読んだら、私は逃したようです-i
。sed
このオプションは、sed
結果を標準出力に印刷するのではなく、ファイルを編集します。
とても良い考えですので参考にしてくださいテストsed
注文今後-i
間違った場合は、「元に戻す」コマンドがないため、スイッチを使用してください。
たとえば、実行すると、端末にsed 's/old/new/' myfile
この内容が印刷されることがわかり、各行の最初のインスタンスはに置き換えられます。実行すると、印刷された内容は何も表示されません。その場所で(元に戻せないように)編集されます。myfile
old
new
sed -i 's/old/new/' myfile
myfile
-i.bak
たとえば、代わりに使用することもできます-i
。これにより、元のファイルがとして保存され、myfile.bak
編集されたファイルがとして表示されますmyfile
。 (必要な拡張子を定義できます。ドットで.bak
始める必要はありませんが、.bak
この目的によく使用されます。)
スペースを含むファイル名の周りの引用符は別の問題であり、答えは簡単です。単語を分離せずに変数拡張を取得するには、二重引用符を使用します。したがって、変数がある場合は、filenamevariable="My file name which contains spaces"
次のように参照する必要があります。sed 's/old/new/' "$filenamevariable"
その他のおすすめ本: