Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在每次出现大写字母后跟数字后添加下划线_Bash - Fatal编程技术网

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,

在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,则可以使用与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