スクリプトのsed代替エラー

スクリプトのsed代替エラー

ファイルの一部の単語を置き換えるスクリプトを作成しています。行を(ファイル名の最初の部分).fastq.gzに変更したいと思います。

私は持っています

ファイル入力用ls /pathway *.sam | sort | uniq

sed -i "s/VFC-00012-02.fastq.gz/${filename}.fastq.gz/g" $file 実行

完璧

このスクリプトを実行すると、空のセクションが表示されます。

私が欲しい(ファイル名B(B.extensions))

B.fastq.gz 本文から

sed コマンドの後

私はこの問題を次の助けを借りて解決しました。 https://askubuntu.com/questions/1011839/how-do-i-use-file-names-in-a-sed-command

ベストアンサー1

閉じる一重引用符の後にはスペースが必要です。それ以外の場合、シェルはファイル名を置換の一部として解釈します。

sed -i 's/VFC-00012-02.fastq.gz/$filename.fastq.gz/' "$file"

トークン化されないように、変数の周りに二重引用符を付けることをお勧めします。

一方、いいえ変数($ filename)を二重引用符で囲むことは、変数がまったく拡張されないことを意味します。つまり、ファイルにリテラルドル記号が含まれます。これがあなたが望むものかどうかはわかりません。

$filenameを拡張するために二重引用符に切り替えることができますが、sed特殊文字を含めることができることに注意する必要があります。 sedは引数を見る前にシェルが変数を拡張するので、sedはその文字がソースからどこから来たのかわからないからです。変わりやすい。

おすすめ記事