我有几个名为 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
请告诉我这里出了什么问题
最佳答案
如果/.../
命令的模式包含/
,
它破坏了语法。
一种解决方案是使用 \
转义嵌入的 /
:
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
这样的行也会错误地匹配。
尽管您可能不希望文件中出现这样的行,
准确是好事。
关于linux - 从 cshell 中的 .txt 文件中删除特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45115793/