在bash脚本中以斜杠“/”字符之前插入文本

时间:2017-10-03 08:05:56

标签: regex linux bash shell sed

我在文件中有一行如下:

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

你能帮我找一个解决办法吗?

4 个答案:

答案 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