0

ファイル内のすべてのラテンアルファベットコンポーネントにマークを付けようとしています。例:

This is English. 这是中文。 This is more English.

これは次のようにマークされます:

\english{This is English.} 这是中文。 \english{This is more English.}

私はsed単語をマークするために使用しようとしました:

sed 's/[A-Za-z0-9 ]*/\\english{&}/g' file

これを実行した後、それはほとんど正しいです、しかし、それはまたすべての漢字の間にマークを置きます、例えば:

\english{This is English.} 这\english{}是\english{}中\english{}文\english{}。 \english{This is more English.}

また、単なるスペースであるが、マークを必要としない場所をマークしています。例:

这是中文。 这也是中文。

これは次のようになります。

这是中文。\english{ }这也是中文。

sed文字間のスペースをマークしないように、またファイルに'\english{}を配置しないように、このスクリプトを変更するにはどうすればよいですか?\english{ }

4

4 に答える 4

2

文字間のマークは、*「ゼロ以上」を意味するによって引き起こされます。「1つ以上」を意味する場合は、\+の代わりに使用して*ください。

単一のスペースに一致させたくない場合は、例えばを使用することができます

sed 's/[A-za-z0-9][A-Za-z0-9 ]*/\\english{&}/g'

これは、少なくとも1つの非スペース文字が必要であることを意味します。

于 2012-09-16T12:11:40.160 に答える
2

を使用した片道GNU sed

LC_ALL="POSIX" sed -r 's/[^\o200-\o377]+/\\english{&}/g' file.txt

結果:

\english{This is English. }这是中文。\english{ This is more English.}
于 2012-09-16T12:05:00.330 に答える
1

[A-Za-z0-9 ]*基本的には、ラテン文字、アラビア数字、および空白に一致することを意味します。

あなたは次のようなものが欲しい([A-Za-z][-A-Za-z0-9 ,.!?']*)

RegexPalのような素晴らしい RegExp 実験ツールがあります。

于 2012-09-16T12:01:04.810 に答える
1

正規表現の意味: 任意の英数字と任意のスペースに一致します。したがって、中国語のテキスト間のスペースも一致します。

これを試してください:

 's/[A-Za-z0-9]* */\\english{&}/g' file

意味は、任意の英数字の後に 0 個以上のスペースが続くものと一致します。

于 2012-09-16T12:02:37.440 に答える