我有几个名为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
请告诉我这里出了什么问题
答案 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
之类的行也会错误地匹配。
虽然你可能不希望文件中有这样的行,
准确无误。