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

标签 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

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

最佳答案

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

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/

相关文章:

c - 在linux上执行C语言输入文件

sql-server - 如何在 Linux 中通过 Perl 脚本访问 SQL Server 数据库?

linux - 无法使 Star-Schema DBMS 基准数据生成器正常运行

linux - wait 命令不等待变量赋值吗?

linux - 为什么 qx(ssh ...) 没有输出?

bash - 从 fasta 文件中删除多个序列

bash 命令在新的命令行窗口中运行程序

目录

linux - 从 shell 脚本中的 RTF 文件中提取信息

bash - 并行 : How to reference multiple arguments from a function