Linux

腳本中的 sed 替換錯誤

  • September 6, 2022

我正在編寫一個腳本來替換我文件中的部分單詞。我希望將行更改為(文件名的第一部分).fastq.gz

我有

用於歸檔ls /pathway *.sam | sort | uniq

做 sed -i “s/VFC-00012-02.fastq.gz/ $ {filename}.fastq.gz/g” $ 文件

完畢

執行此腳本後我得到了空白

我想要(文件名為 B (B.extensions))

B.fastq.gz 在文中

在 sed 命令之後

我在https://askubuntu.com/questions/1011839/how-do-i-use-file-names-in-a-sed-command的幫助下解決了這個問題

在結束單引號後需要一個空格。否則,shell 將文件名解釋為替換的一部分。

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

將變數雙引號是一個很好的做法,這樣它就不會進行分詞。

另一方面,雙引號變數 ($filename) 意味著它根本不會被擴展,即文件將包含文字美元符號。我不確定這是你想要的。

您可以切換到雙引號來擴展 $filename,但是如果它可以包含 sed 特殊字元,則必須小心,因為 shell 在 sed 看到參數之前擴展變數,因此 sed 不知道字元來自原來是可變的。

引用自:https://unix.stackexchange.com/questions/716370