下面一行中的 sed 命令有什么作用?

log*_*g N 0 sed

我正在分析脚本文件,我遇到了下面的行

sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh
Run Code Online (Sandbox Code Playgroud)

我仍然无法弄清楚这个命令有什么作用。我知道这-i意味着它是一个内联操作。但它的作用对我来说仍然未知。请帮助我理解这一行。

ilk*_*chu 6

sed -i  
Run Code Online (Sandbox Code Playgroud)

-i 说要就地编辑文件,即用相同的名称写入新版本

/JBOSS_HOME\/bin\/run.sh/
Run Code Online (Sandbox Code Playgroud)

由斜杠分隔的模式,模式中包含的斜杠用反斜杠引用,因此这匹配任何包含JBOSS_HOME/bin/run.sh. (实际上因为它是一个正则表达式,点匹配任何字符。)

i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp '
Run Code Online (Sandbox Code Playgroud)

当模式匹配时运行的命令,i用于插入一行(在当前之前)。要添加的行由反斜杠分隔,因此这会添加字符串export TMP_FOLDER=$JBOSS_HOME/server/default/tmp

/home/jboss/runJBOSSEAP.sh
Run Code Online (Sandbox Code Playgroud)

目标文件名。

例如

$ echo JBOSS_HOME/bin/run.sh > pla 
$ sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' pla
$ cat pla
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp 
JBOSS_HOME/bin/run.sh
Run Code Online (Sandbox Code Playgroud)

它与例如此处的示例几乎相同