正規表現を使用してforループでSedを使用する

正規表現を使用してforループでSedを使用する

サンプル名のリストを繰り返し、sedを使用してそのサンプル名を変更するには、forループを使用してjsonファイルを変更しようとしています。これで、入力ファイルのサブセットは次のようになります。

      "WA82671",
        "WA8267-technical-replicate-1":"AGCGTTGAT+CACATGTCC",
        "WA8267-technical-replicate-2":"TCATGGTCAAT+TGCAGTGAGC"
    "WA82671":{ "/scratch/jjz86252/ipyrad/3RAD_processed/WA8267_R1_1.fq.gz",
                "/scratch/jjz86252/ipyrad/3RAD_processed/WA8267_R2_1.fq.gz"
        "name":"WA82671",

私は願っています。

      "WA8267",
        "WA8267-technical-replicate-1":"AGCGTTGAT+CACATGTCC",
        "WA8267-technical-replicate-2":"TCATGGTCAAT+TGCAGTGAGC"
    "WA8267":{"/scratch/jjz86252/ipyrad/3RAD_processed/WA8267_R1_1.fq.gz", 
              "/scratch/jjz86252/ipyrad/3RAD_processed/WA8267_R2_1.fq.gz"
        "name":"WA8267",

私は$(cat Samplenames); do sed -er 's/$i\1/$i/g' names; で次のコマンドを試しましたが、このコマンドは変更に失敗しました。 iのすべての値に対してファイル全体を印刷します。

答え1

/スラッシュを含むファイルパスを使用しているため、sed式にカンマを使用する必要があります。まるで…

for name in $(cat samplenames); do
    sed -e "s,${name}1,${name},g" sample --in-place
done

関連情報