我正在循环遍历文件夹,打开文件夹中具有相同名称的文件,并进行一些操作。
我正在使用 sed 来操作一行:
sed "1s/Log R Ratio/$SAMPLE.LRR/" $FILE
其中 $FILE 是名称中包含 1 个以上空格的文件。例子:
NAT062813_Batch A_1_TR27GD1_CytoScanHD_NL_092913/NAT062813_Batch A_1_TR27GD1_CytoScanHD_NL_092913.txt
有没有办法(无需遍历和重命名)将 sed 与这些文件一起使用?我尝试在 $FILE 周围加上引号,但这只是将其打印出来。
答案1
重读您的问题,我认为您只是错过-i
了sed
.该选项可以sed
就地编辑文件,而不是将结果打印到标准输出。
请注意,这是一个非常好的主意测试你的sed
命令前使用-i
开关,因为如果你弄错了,就没有“撤消”命令。
因此,例如,如果您运行,您将在终端上sed 's/old/new/' myfile
看到打印出的内容,其中每行的第一个实例替换为。如果您运行,您将不会看到任何打印出来的内容 -将被(不可撤销地)就地编辑。myfile
old
new
sed -i 's/old/new/' myfile
myfile
例如,您还可以使用-i.bak
代替-i
,这将导致原始文件保存为 ,myfile.bak
编辑后的文件显示为myfile
。 (您可以定义您想要的任何扩展名,并且.bak
它不需要以点开头,但.bak
通常用于此目的。)
包含空格的文件名周围的引号是一个单独的问题,答案很简单 - 使用双引号来获得变量扩展而无需分词。因此,如果你有一个变量filenamevariable="My file name which contains spaces"
,你需要像这样引用它:sed 's/old/new/' "$filenamevariable"
其他一些推荐阅读: