Bash sed -i 更新尾部反斜杠

Bash sed -i update with trailing backslash

我想 运行 这个 :

sed -i -e "s/\($user hard nproc \).*/{value here ending with /}/" /etc/something.conf

此处,{此处以 /} 结尾的值类似于 100/abc /

但是如果我只是放/喜欢 :

sed -i -e "s/\($user hard nproc \).*/abc//" /etc/something.conf

我收到这个错误: `s'的未知选项

我一直想解决这个问题,但想不出任何解决方案...

基本上我想做的是更新我的旧值 “用户名 hard nproc 10” 到“用户名 hard nproc 10**” 与“**”。

您需要对结尾的斜线进行转义或对表达式使用不同的字符。即:

sed -i "s/\($user hard nproc \).*/abc\//" /etc/cgrules.conf

sed -i "s#\($user hard nproc \).*#abc/#" /etc/cgrules.conf

遵循简单的 sed 对我来说效果很好。

echo "username hard nproc 10" | sed 's/username hard nproc 10/username hard nproc 10**/g'
username hard nproc 10**

假设您想将这些旧值和新值放入变量中,那么以下内容可能会对您有所帮助。

old_value="username hard nproc 10"
new_value="username hard nproc 10**"
echo "username hard nproc 10" | sed "s/$old_value/$new_value/g"

输出如下。

username hard nproc 10**

同样,尽管此处有回声,您也可以提及您的 Input_file。如果您想保存 Input_file 本身的更改,也可以使用 sed-i 选项(我建议 运行 以上代码不对 Input_file 进行更改,然后 运行 与 -i 选项,一旦您对结果感到满意)。

在 sed 中,每当你想用 / 做某事时,它会妨碍用于命令的 /,最简单的做法是使用不同的分隔符命令。例如:

sed -e "s@\($user hard nproc \).*@{value here ending with /}@"

会很好用。 s/pattern/repl/flags只是一个约定,你也可以使用s@pattern@repl@flags