Bash 在每次出现大写字母后跟数字后添加下划线
在bash中,我想替换Bash 在每次出现大写字母后跟数字后添加下划线,bash,Bash,在bash中,我想替换 H+O2=O+OH 与 我用awk和sed尝试了无数的事情,但到目前为止没有任何效果。 问题是,我不知道如何保存字符串,然后只添加,而不是替换O或2。 谢谢 您可以使用sed: $> s='H+O2=O+OH' $> sed -E 's/([A-Z])([0-9])/\1_\2/g' <<< "$s" H+O_2=O+OH $>s='H+O2=O+OH' $>sed-E的/([A-Z])([0-9])/\1\u2/g'如果选择Perl,
H+O2=O+OH
与
我用awk和sed尝试了无数的事情,但到目前为止没有任何效果。
问题是,我不知道如何保存字符串,然后只添加
,而不是替换O
或2
。
谢谢 您可以使用
sed
:
$> s='H+O2=O+OH'
$> sed -E 's/([A-Z])([0-9])/\1_\2/g' <<< "$s"
H+O_2=O+OH
$>s='H+O2=O+OH'
$>sed-E的/([A-Z])([0-9])/\1\u2/g'如果选择Perl,则可以使用与Anubhava非常类似的技术:
echo'H+O2=O+OH'| perl-pe's/([A-Z])([0-9])/\1\u2/g'
你能解释一下字符串是如何保存在sed中的吗?它与1有关吗?\1
是第一个捕获组的反向引用,即([A-Z])
,\2
是第二个捕获组的反向引用,即([0-9])
,所以为了正确起见:sed's/(regex1)(regex2)/\1\u2/g'对不起,我按得太多了。。。sed的/(regex1)(regex2)/\1\u2/g”是指在regex1和regex2出现后,用regex1替换为2和regex2?1和2之前的反斜杠用于转义?\N
是sed的正则表达式引擎用于表示反引用的语法<代码>\d
可以代替perl中的[0-9]
。。。所以perl-pe的/([A-Z])(\d)/\1\u2/g'
甚至perl-pe的/([A-Z])(?=\d)/\1\u2/g'
$> s='H+O2=O+OH'
$> sed -E 's/([A-Z])([0-9])/\1_\2/g' <<< "$s"
H+O_2=O+OH