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)
如果您需要的只是从文件中删除 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)