我正在编写一个脚本来替换文件中的部分单词。我希望将行更改为(文件名的第一部分).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 不知道这些字符来自原来是变量。