从cshell中的.txt文件中删除特定行

时间:2017-07-15 07:42:16

标签: linux bash

我有几个名为submit.txt的.txt文件,其中包含一行

bsub -q l ./dolist.csh

我想从所有这些文件中删除这一行,我现在正在做的是跟随但是它给了我以下错误:

sed: -e expression #1, char 14: unknown command: `m'

使用的代码是:

#!/bin/bash                                                                                                                                            

for(( x=7; x<=65 ; x+=2))
do
    cd arm_$x
    sed -i '/bsub -q l ./dolist.csh/d' submit.txt
    cd ../
done

请告诉我这里出了什么问题

1 个答案:

答案 0 :(得分:0)

如果/.../命令的模式包含/, 它破坏了语法。 一种解决方案是使用/转义嵌入式\

sed -i '/bsub -q l \.\/dolist\.csh/d' submit.txt

另一种方法是为/.../命令使用不同的分隔符。 其语法为\?...?,其中?可以是任何字符(但通常使用?),例如:

sed -i '\?bsub -q l \./dolist\.csh?d' submit.txt

当您有多个嵌入式/并且转义所有这些语法时,这种语法非常有用,这些语法不实用或命令难以阅读。

请注意,在这两个示例中,我还转义了所有.个字符, 因为它们在正则表达式中具有特殊含义以匹配任何字符,而不仅仅是一个点。 如果您没有逃脱.bsub -q l x/dolistycsh之类的行也会错误地匹配。 虽然你可能不希望文件中有这样的行, 准确无误。