我在文件中有一行如下:
2 14 * * * /run/opt/server/autoi.sh
我想在/run/opt/server/autoi.sh之前插入“root”,如下所示:
2 14 * * * root /run/opt/server/autoi.sh
我尝试过以下命令
sed '//run/i root' filename
但它会出现以下错误:
sed: -e expression #1, char 0: no previous regular expression
你能帮我找一个解决办法吗?
答案 0 :(得分:2)
使用不同的分隔符,您需要使用s
命令替换,例如:
sed 's@/run@root /run@' filename
或不重复/run
:
sed 's@/run@root &@' filename
答案 1 :(得分:2)
您使用的是错误的result = repmat([0, 1], 1, n);
命令。 sed
命令将在匹配行之前插入一个新行,当然,i
根本不是有效的正则表达式。
//run
命令的一般形式是
sed
其中地址可以是正则表达式或行号,而 action 是一个命令。
实际上,您需要一个没有地址的动作,这意味着它将应用于每个输入行;并且您要执行的操作是替换。
<address> <action>
我们正在使用sed 's%/run%root &%' filename
便捷速记来重复与第一个正则表达式匹配的字符串,以及替代&
的备用正则表达式分隔符,以便/
本身不会被解释为正则表达式分隔符(等效地,你可以反斜杠 - 转义它,但在这里,它会产生一个名为leaning toothpick syndrome).的东西
这会将结果打印到标准输出,而不是修改文件。一旦确认获得了所需的结果,就可以添加/
选项来修改输入文件。 (在某些平台上,例如* BSD - 包括MacOS - 你需要-i
一个空参数。)
答案 2 :(得分:0)
只需将/
替换为root /
,如下所示。
sed 's/\//root \//' Input_file
答案 3 :(得分:-1)
sed -e 's/run/root\/run/' abc
示例:
[root@myIP tmp]# cat abc
2 14 * * * /run/opt/server/autoi.sh
[root@myIP tmp]# sed -e 's/run/root\/run/' abc
2 14 * * * /root/run/opt/server/autoi.sh
已编辑:要添加用户名。这应该做的伎俩
[root@myIP tmp]# sed -e 's/\//root \//' abc
2 14 * * * root /run/opt/server/autoi.sh