如何在 bash 脚本中在梵文和英文之间添加 space?

How to add space between Devanagari and English in bash script?

我有一个这样的文本文件,

#greenऔर
<सेमीकोलन>
actionएक्शनmysql
admin2को

预期输出是,

#green और
< सेमीकोलन >
action एक्शन mysql
admin2 को

这是我到目前为止尝试做的,sed 's/[अ-ह].*/ &/g' testfile但是我得到的输出是这样的,

#green और
< सेमीकोलन>
action एक्शनmysql
admin2 को

是否可以使用 awk 或 sed 来获得预期的输出?

您可以在这里使用 Perl:

perl -i -CSD -Mutf8 -pe 's/(?<=[अ-ह\p{M}])(?=[^अ-ह\p{M}])|(?<=[^अ-ह\p{M}])(?=[अ-ह])/ /g' filename

regex demo. See the online demo

#!/bin/bash
s='#greenऔर
<सेमीकोलन>
actionएक्शनmysql
admin2को'
perl -CSD -Mutf8 -pe 's/(?<=[अ-ह\p{M}])(?=[^अ-ह\p{M}])|(?<=[^अ-ह\p{M}])(?=[अ-ह])/ /g' <<< "$s"

输出:

#green और 
< सेमीकोलन >
action एक्शन mysql
admin2 को 

正则表达式匹配

  • (?<=[अ-ह\p{M}])(?=[^अ-ह\p{M}]) - [अ-ह] 范围内的天城文字母或变音符号 (\p{M}) 与天城文字母和变音符号以外的字符之间的位置
  • | - 或
  • (?<=[^अ-ह\p{M}])(?=[अ-ह]) - 除梵文字母和变音符号以外的字符与梵文字母或变音符号之间的位置。

.* 匹配该行的整个剩余部分,并使 g 标志无用。假设字符 class 是正确的(抱歉,我不熟悉梵文)你可以使用

sed 's/[अ-ह]\+/ & /g' testfile

虽然您最终可能会得到一些您想要删除的额外空格。

sed 's/[अ-ह]\+/ &/g;
    s/^ //;s/ $//;s/  / /g' testfile