使用 sed 编辑名称中包含空格的文件中的行

使用 sed 编辑名称中包含空格的文件中的行

我正在循环遍历文件夹,打开文件夹中具有相同名称的文件,并进行一些操作。

我正在使用 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

重读您的问题,我认为您只是错过-ised.该选项可以sed就地编辑文件,而不是将结果打印到标准输出。

请注意,这是一个非常好的主意测试你的sed命令使用-i开关,因为如果你弄错了,就没有“撤消”命令。

因此,例如,如果您运行,您将在终端上sed 's/old/new/' myfile看到打印出的内容,其中每行的第一个实例替换为。如果您运行,您将不会看到任何打印出来的内容 -将被(不可撤销地)就地编辑。myfileoldnewsed -i 's/old/new/' myfilemyfile

例如,您还可以使用-i.bak代替-i,这将导致原始文件保存为 ,myfile.bak编辑后的文件显示为myfile。 (您可以定义您想要的任何扩展名,并且.bak它不需要以点开头,但.bak通常用于此目的。)

包含空格的文件名周围的引号是一个单独的问题,答案很简单 - 使用双引号来获得变量扩展而无需分词。因此,如果你有一个变量filenamevariable="My file name which contains spaces",你需要像这样引用它:sed 's/old/new/' "$filenamevariable"

其他一些推荐阅读:

相关内容