Perl 如何在匹配前后替换字符
我的文件中有Perl 如何在匹配前后替换字符,perl,awk,sed,Perl,Awk,Sed,我的文件中有标记。我想用下划线字符替换它之前或之后的任何空格 如何使用sed、awk或perl实现这一点 例如: 注意:我使用的是:,因为空格会被忽略,并带有`(勾号) ::替换为\uuuuuuuuu\uuuuuuuuuuuu ::将替换为\uuuuuuuuuuuuuuuuuuuuu\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu ::将被替换为\uuuuuuuuuuu ::替换为\uuuuuuuuuuuuuuuuuuuuuu 我试过了 $ echo "test test &l
标记。我想用下划线字符替换它之前或之后的任何空格
如何使用sed、awk或perl实现这一点
例如:
注意:
我使用的是:
,因为空格会被忽略,并带有`(勾号)
:
:
替换为\uuuuuuuuu
\uuuuuuuuuuuu
:
:
将替换为\uuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
:
:
将被替换为\uuuuuuuuuuu
:
:
替换为
\uuuuuuuuuuuuuuuuuuuuuu
我试过了
$ echo "test test <br> test test" | sed '/ *<br> */s/ /_/g'
test__test__<br>___test__test
$echo“测试测试
测试测试”| sed'/*
*/s/\ug'
测试测试测试测试
但是我期待着测试测试
我试过@philippe answer
这是可行的,但我提出了另一个空间问题
我试过了
$ echo "for messages:<br> # This" | perl -pe 's[(\s*<br>\s*)][$v=$1; $v =~ s/ /_/g; "$v"]ge'
for messages:<br> # This
$echo”用于消息:
#此“| perl-pe的[(\s*
\s*)][$v=$1;$v=~s//\ug;“$v”]ge”
对于消息:
#此
为什么它不起作用
如果我删除了空间,然后手动插入相同的空间,它就会起作用。我不知道那些是什么样的空间
$ echo "for messages:<br> # This" | perl -pe 's[(\s*<br>\s*)][$v=$1; $v =~ s/ /_/g; "$v"]ge'
for messages:<br>_________# This
$echo”用于消息:
#此“| perl-pe的[(\s*
\s*)][$v=$1;$v=~s//\ug;“$v”]ge”
对于消息:
\uuuuuuuuuuuuuuu35;此
下面两个句子看起来一样,但只有一个有效。你能告诉我什么是神秘的吗。您可以在终端中复制粘贴
"for messages:<br> # This" #NOT WORKIN
"for messages:<br> # This" #WORKING
”对于消息:
#此“#不工作
“对于消息:
#此”#正在工作
我复制粘贴在sublime文本编辑器中,以查看它们是什么类型的空格字符
因此,\s*
\s*
只能处理一种类型的空格
也适用于不起作用的情况
$ echo "for messages:<br> # This" | od -a
0000000 f o r sp m e s s a g e s : < b r
0000020 > B sp sp B sp sp B sp sp B sp sp # sp T
0000040 h i s nl
$echo”用于消息:
此“| od-a
0000000 f或sp m e s a g e s:B sp B sp B sp#sp T
00000 40小时i s nl
Perl版本:
echo "test test <br> test test" | perl -CSD -pe 's[\s*<br>\s*][$& =~ s/\s/_/gr]ge'
echo“test test
test test”| perl-CSD-pe的[\s*
\s*][$&=~s/\s/\ugr]ge'
对于不起作用的情况,运行此命令并粘贴结果:
echo "for messages:<br> # This" | od -a
echo”用于消息:
此“| od-a
我有:
0000000 f o r sp m e s s a g e s : < b r
0000020 > sp sp sp sp sp sp sp sp # sp T h i s nl
0000000或sp m e s a g e s:
sp#sp h i s nl
我用你的有效解决方案更新了我的问题。我面临另一个空间问题。我已经用你问的结果更新了我的问题。不同的是,我发现这是错误的。我将用空格替换,然后使用答案。谢谢你IP:$v=$1$v=~s/\ug;“$v”
可以写成$1=~s//\ugr
@santhoshyedii,使用-CSD
(perl-CSD-pe'.
)这将对输入进行解码并对输出进行编码,以便$
实际包含一个NBSP,以便\s
与之匹配