2

file1.texなどの TeX コマンドを含むファイル があります。すべてのコマンドは、A ~ Z の大文字と小文字の文字列 + という形式で、すべての後にスペースが続きます。\em\par\

\すべてのスペースを、スラッシュ、およびスペースに置き換える、このようなコマンドを使用する必要があります。

sed -i "s/\ /\\\\\ /g" ./file1.tex

ただし、TeX コマンドの直後に表示される空白をこれらで置き換えたくありません。たとえば、私はこれが欲しい:

\noindent This is a sentence {\em which has some words}.
This is another \hfill sentence \ldots with some more words.

なるために:

\noindent This\ is\ a\ sentence\ {\em which\ has\ some\ words}.
This\ is\ another\ \hfill sentence\ \ldots with\ some\ more\ words.

の形式をとるコマンドの後に表示されるものを除いて、すべてのスペースを置き換えるにはどうすればよい\sometextですか?

4

4 に答える 4

3

後読みはサポートされていないのでsed、Perlを使用するとはるかに簡単になると思います。

$ perl -pe 's/\b(?<!\\)(\w+)\b /$1\\ /g' texfile
\noindent This\ is\ a\ sentence\ {\em which\ has\ some\ words}.
This\ is\ another\ \hfill sentence\ \ldots with\ some\ more\ words.

インプレースでファイルに変更を永続的にするには:

perl -pi -e 's/\b(?<!\\)(\w+)\b /$1\\ /g' texfile

説明:

正規表現は、バックスラッシュで始まり、その後にスペースが続く単語と一致します。

  • \b-単語の境界
  • (?<!-キャプチャしないネガティブな後読みを開始します(一致しない)
  • \\-エスケープされたバックスラッシュ
  • )-後読みを閉じます
  • (-キャプチャグループを開始します
  • \w+-1つ以上の単語文字に一致します(英数字とアンダースコア)
  • )-キャプチャグループを閉じます
  • $1-キャプチャグループを置換にコピーします
  • \\-円記号を追加します
  • g-グローバルに置換を行います

私はリストからいくつかのことを残しましたが、それは自明であるはずです。

于 2012-05-20T02:47:26.373 に答える
2

これはあなたのために働くかもしれません:

 sed -i 's/\(\\[^ ]*\) /\1\n/g;s/ /\\ /g;y/\n/ /' file

説明:

  • コマンドに続くすべての単一スペースを改行に置き換えます。s/\(\\[^ ]*\) /\1\n/g
  • 他のすべてのスペースの前に\.s/ /\\ /g
  • すべての改行をスペースに置き換えます。y/\n/ /
于 2012-05-20T08:07:27.637 に答える
1

TeX コマンドの末尾にあるスペースを認識可能なテキストに置き換え、すべてのスペースの前にスラッシュを追加し、最後に追加したテキストを削除します。例えば:

s;\(\\[[:alpha:]]\{1,\}\);\1{};g
s; ;\\ ;g
s;\(\\[[:alpha:]]\{1,\}\){};\1 ;g

ここで{}は、TeX コマンドの末尾に追加することを選択しました。これは、その構造を持つ TeX コマンドが存在しないことがわかっているため安全です。

于 2012-05-20T08:03:37.757 に答える
1

私はawkこのように使用します:

awk '{ for (i=1; i<NF; i++) if ($i ~ /\\/) printf "%s ", $i; else if ($i !~ /\\/) printf "%s\\ ", $i; printf $NF"\n" }' file.tex

HTH

于 2012-05-20T02:18:55.460 に答える