我已经获得了别人的shell脚本(bash),其中一行如下:
sed -i "s@_RUNDIR_@$RUNDIRECTORY/runSettings.txt@" start.m
当然,文件中指定了$RUNDIRECTORY
,但RUNDIR
未在任何地方指定。 runSettings.txt
是我有权访问的文件,我认为此处的目标是用$RUNDIRECTORY
替换路径的某些部分。通过快速搜索sed -i
的语法,我很困惑s
和@
在字符串中的作用。
有人可以用一个非常基本的例子来帮助我吗?
答案 0 :(得分:1)
-i
标志表示它会修改您的文件:通常,sed只会将其结果输出到stdout。您可以将结果通过管道传输到您的文件中,或者使用replace inline
标志。
s/[search]/replace]/
格式以s
开头,这意味着您要进行搜索。您可以使用大多数任何字符代替/
,因此在您发布的示例中,使用了@
字符:s@[search]@replace@
这对于[搜索]或[replace]术语包含/
字符,因此您无需进行任何花哨的\/
转义。
答案 1 :(得分:0)
RUNDIR
不是变量。这是作者希望在start.m
中的某些行中出现的文本的一部分。
s
表示第一个模式(_RUNDIR_
)的任何一行上的第一个匹配项应替换为第二个模式($RUNDIRECTORY/runSettings.txt
)的值。
@
是一个任意字符,用于描绘模式1和模式2.
在终端中键入man sed
以获取更多信息。
如果意图是将文字文本$RUNDIRECTORY
替换为文件 - 而不是在当前环境中放入可能是该shell变量的值 - 那么您将需要使用单引号而不是双引号:
sed -i 's@_RUNDIR_@$RUNDIRECTORY/runSettings.txt@' start.m