2017-07-15 88 views
1

我有一个行中指定submit.txt几个.txt文件删除从.txt文件中的特定行cshell

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 

,请告诉我,世界卫生大会t在这里出错

+0

请注意,您正在使用正斜杠作为分隔符,但在字符串本身中也有一个。在[]中加上反斜杠或环绕声。 –

+1

看起来像你neee在你的论点中逃避了正斜杠。 sed将其视为commad的分隔符。 –

+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也会错误地匹配。 虽然你可能不希望文件中有这样的行,但是很准确。