脚本中的 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

结束单引号后需要一个空格。否则,shell 将文件名解释为替换的一部分。

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

最好对变量加双引号,这样它就不会进行分词。

另一方面,不是双引号变量($filename)意味着它根本不会被扩展,即文件将包含文字美元符号。我不确定这是否是你想要的。

您可以切换到双引号来扩展 $filename,但是您必须小心它是否可以包含 sed 特殊字符,因为 shell 在 sed 看到参数之前扩展变量,因此 sed 不知道这些字符来自原来是变量。

相关内容