gpt4 book ai didi

regex - 使用 "grep -n"和 echo : : double backslash interpreted

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:21 25 4
gpt4 key购买 nike

我想用“grep -n”获取模式“\label”的行号到一个文件中。

文件内容为:

\begin{equation}
(\beq{f'_{i}})_{3}-(\beq{e_{i}})_{3}=\text{d}\delta\,\beq{e_{i}}-\delta\,\text{d}\beq{e_{i}}
\label{r58}
\end{equation}

...

\begin{align}
&\beq{mm'_{3}}-\beq{mm_{3}}=\text{d}\delta\,\beq{m}-\delta\,\text{d}\beq{m}
\label{r59} \\
&(\beq{e'_{i}})_{3}-(\beq{e_{i}})_{3}=\text{d}\delta\,\beq{e_{i}}-\delta\,\text{d}\beq{e_{i}}
\label{r60}
\end{align}

...

\begin{equation}
(\beq{g'_{i}})_{3}-(\beq{e_{i}})_{3}=\text{d}\delta\,\beq{e_{i}}-\delta\,\text{d}\beq{e_{i}}
\label{r61}
\end{equation}

...

我使用的命令:

for k in $(grep -n '\\label' test.tex); do echo $k; done

然后我得到:

...
1366:\label{r58}
1376:\label{r59}
\\
1378:\label{r60}
1388:\label{r61}
...

我想要:

...
1366:\label{r58}
1376:\label{r59}
1378:\label{r60}
1388:\label{r61}
...

鉴于我在 k 变量 的值之后处理,我想跳过带有双反斜杠的行,似乎“grep -n”解释了双反斜杠。

我知道我可以在 k 上执行管道命令,例如 "grep -v '\\\\' 但是我可以直接跳过这个双反斜杠吗 grep -n(带有附加标志或更明确的模式)?

谢谢

最佳答案

您可以使用换行符解决问题

$ for k in "$(grep -n '\\label' text.tex)"; do echo "$k"; done
3:\label{r58}
10:\label{r59} \\
12:\label{r60}
19:\label{r61}

即引用命令替换。这是一种非常复杂(不推荐)的使用方式

grep -n '\\label' test.tex

看起来。

如果您不引用命令替换,其结果将进行分词并且 \\ 被视为要循环的单独元素,这就是它有自己的行的原因。

为了得到你想要的部分,你可以使用

$ grep -on '\\label{[^}]*}' test.tex
3:\label{r58}
10:\label{r59}
12:\label{r60}
19:\label{r61}

-o 只保留匹配,正则表达式也匹配 \label 之后的大括号。

关于regex - 使用 "grep -n"和 echo : : double backslash interpreted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35007795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com