sed - 在特定的行号处插入带反斜杠的字符串

时间:2016-01-25 08:43:57

标签: regex sed

我有一个包含多个乳胶方程式的文件,如下所示:

...

\begin{equation}
\beq{x}=x^{1}\beq{e_{1}}+x^{2}\beq{e_{2}}+x^{3}\beq{e_{3}}
\end{equation}

...

\begin{equation}
\beq{y}=y^{1}\beq{e_{1}}+y^{2}\beq{e_{2}}+y^{3}\beq{e_{3}}
\end{equation}

...

我想在" \end{equation}"之前插入字符串" \tag{number}"我可以成功获得number变量。

要将此字符串插入" $(($line)-1)"标识的行,我会:

gsed -i "$(($line)-1)i \tag{$number}" file

但我只得到:

...

\begin{equation}
\beq{x}=x^{1}\beq{e_{1}}+x^{2}\beq{e_{2}}+x^{3}\beq{e_{3}}
tag{1}
\end{equation}

...

\begin{equation}
\beq{y}=y^{1}\beq{e_{1}}+y^{2}\beq{e_{2}}+y^{3}\beq{e_{3}}
tag{2}
\end{equation}

...

正如您所看到的,我无法在" \ tag"的开头打印反斜杠字符。串

我尝试过:

gsed -i "$(($line)-1)i '\'tag{$number}" file

gsed -i "$(($line)-1)i \\tag{$number}" file

但没有好结果,

如果有人能看出错误的原因......

由于

PS:我在使用MacOS X,这就是我使用gsed

的原因

1 个答案:

答案 0 :(得分:1)

你需要五个斜杠:

gsed -i "$(($line)-1)i \\\\\tag{$number}" file

让我先解释一下引用的命令:

gsed -i '1i \\\test'

在这种情况下你需要三个斜杠:

第一个命令用i命令分隔要插入的文本,第二个命令用于转义斜杠本身,否则它会扩展为\t。第三个,现在是转义的斜杠,将在新行的开头插入文字\

如果我们另外使用双引号括起命令,

gsed -i "1i\\\\\test"

该字符串将获得shell解析的主题。因此,单引号命令中的两个转义斜杠都需要进行转义。这有5个斜杠。

到目前为止一切顺利。但是,由于您要将shell变量插入到命令中,因此您需要确保其中的斜杠也会被转义。