LaTeXファイルには次のコードがあります。
for \emph{service} in \emph{host}.resources:
for \emph{file} in \emph{host}.resources:
\underline{service}.requires.add(\underline{file})
for \emph{package} in \emph{host}.resources:
\underline{service}.requires.add(\underline{package})
これはリスト環境にあり、まだ emph コマンドと underline コマンドが必要なため、LaTeX コマンドをエスケープしました。結果は次のようになります。
for %*\emph{file}*) in %*\emph{host}*).resources:
次のsedコマンドを使用してこのプロセスを自動化しようとしています。
sed "s_\(\\emph{[a-z]*}\)_%\*\1\*)_"
ただし、これは次のような出力を生成します。
for \%*emph{dir}*) in \emph{host}.resources:
これには2つの問題があります。
- emph の前の '\' は LaTeX エスケープ文字の前に配置されます。
- sedは最初の一致のみを置き換えるようです。私はsedの貪欲な一致について知っているので、中かっこ内に.*の代わりに[az]*を使用します。しかし、これはうまくいかないようです。
私が望むことをするようにsedを取得する方法についてのアイデアはありますか?
ベストアンサー1
それを発見。
sedコマンドは二重引用符を使用するため、sedとbashの両方に対してスラッシュをエスケープする必要があります。 bashがエスケープを無視するように単一引用符を変更すると、最初の問題が解決されます。
「g」を追加すると(グローバル置換)は、今行のすべてと一致します。
最終結果:
sed 's_\(\\emph{[a-z]*}\)_%\*\1\*)_g'