如何使用sed
打印文件\begin{mcstas}
中\end{mcstas}
和foo.tex
之间的所有大写单词?
以下示例包含foo.tex的最小示例:
\begin{mcstas}
DEFINE COMPONENT child_name COPY parent_name
SETTING PARAMETERS (newpar1, newpar2)
INITIALIZE COPY parent_name EXTEND
SAVE
\end{mcstas}
foo FALSE POSITIVE
\begin{mcstas}
DEFINE COMPONENT name ...
\end{mcstas}
最佳答案
正如您所问的那样,这有点棘手:\begin{mcstas}
可以轻松完成\end{mcstas}
和sed
之间的部分,但最好使用grep
而不是sed
完成“print all大写单词”部分。因此,如果您只想完成它,则可以执行以下操作:
$ sed '/\\begin{mcstas}/,/\\end{mcstas}/!d' foo.tex | grep -ow '[A-Z]\+'
DEFINE
COMPONENT
COPY
SETTING
PARAMETERS
INITIALIZE
COPY
EXTEND
SAVE
DEFINE
COMPONENT
这是一个执行相同功能(如您最初要求的)的
sed
命令的样子:$ sed -n '/\\begin{mcstas}/,/\\end{mcstas}/!d; s/\b/\n/g; :a; /^[A-Z]\+\n/P; s/[^\n]*\n//; ta' foo.tex
DEFINE
COMPONENT
COPY
SETTING
PARAMETERS
INITIALIZE
COPY
EXTEND
SAVE
DEFINE
COMPONENT
关于regex - 如何在与sed和 friend 一起的区域中打印所有大写单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18947866/