如何从文件中删除特定字符串

Eri*_*kli 3 command-line text-processing

我确实有一个 bash 脚本。我想从文本文件中删除特定字符串。我已经在网上找到了一个命令,但似乎不太稳定。

我试过了;

mv .admins .adminsold
sed -r "s#${MYFUNCTION}(,|$)##g" <.adminsold >.admins
Run Code Online (Sandbox Code Playgroud)

我的输入文件;

# Admin rule
[[rule]]
    # Set your admin Group Ids here, ex: [ 13, 42 ]
        groupid = [  329, 2, 324, 156 ]
    # And/Or your admin Client Uids here
    useruid = []
    # By default treat requests from localhost as admin
    ip = [ "127.0.0.1", "::1" ]
    "+" = "*"
Run Code Online (Sandbox Code Playgroud)

预期文件;

# Admin rule
[[rule]]
    # Set your admin Group Ids here, ex: [ 13, 42 ]
        groupid = [  329, 2, 156 ]
    # And/Or your admin Client Uids here
    useruid = []
    # By default treat requests from localhost as admin
    ip = [ "127.0.0.1", "::1" ]
    "+" = "*"
Run Code Online (Sandbox Code Playgroud)

Raf*_*ffa 6

如果您需要的只是从文件中删除 324,即精确地:一个空格 324然后一个逗号),则使用:,

sed 's/ 324,//' file
Run Code Online (Sandbox Code Playgroud)

要编辑文件本身(即覆盖原始文件),请使用:

sed -i 's/ 324,//' file
Run Code Online (Sandbox Code Playgroud)

请参阅此答案以获取更多信息。


从你的例子中需要考虑的事情:

  • ?将使前一个字符可选,您需要用反斜杠对其进行转义\...例如,进行,可选使用:

    sed 's/ 324,\?//' file
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您需要匹配文字/,则需要转义它\/,或者可以将分隔符从通常的分隔符更改/为其他内容,例如@:或其他任何内容),如下所示:

    sed 's@wxyz0123456789+/@@' file
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您只想将替换应用于包含groupidthen 指定/groupid/为替换部分之前的条件的行,如下所示:

    sed '/groupid/ s/ 324,//' file
    
    Run Code Online (Sandbox Code Playgroud)