【发布时间】:2020-08-26 02:12:15
【问题描述】:
我的文件有<br> 标签。我想使用_ 下划线字符替换它之前或之后的任何空格
我如何使用 sed、awk 或 perl 来做到这一点。
例如:
Note: 我正在使用:,因为空格会被 `(刻度线)忽略
: <br> : 替换为____<br>___
: <br> : 替换为______<br>___
: <br>: 替换为______<br>
:<br> : 替换为<br>___
我试过了
$ echo "test test <br> test test" | sed '/ *<br> */s/ /_/g'
test__test__<br>___test__test
但我期待test test__<br>___test test
我试过@philippe 回答。
它的工作,但我想出了另一个空间问题
我试过了
$ echo "for messages:<br> # This" | perl -pe 's[(\s*<br>\s*)][$v=$1; $v =~ s/ /_/g; "$v"]ge'
for messages:<br> # This
为什么它不起作用。
如果我删除空格,然后手动插入相同的空格,它可以工作。那些我不知道的空间是什么样的。
$ echo "for messages:<br> # This" | perl -pe 's[(\s*<br>\s*)][$v=$1; $v =~ s/ /_/g; "$v"]ge'
for messages:<br>_________# This
以下两个句子看起来相同,但只有一个有效。你能告诉我有什么神秘的吗?您可以在终端中复制粘贴
"for messages:<br> # This" #NOT WORKIN
"for messages:<br> # This" #WORKING
我在 sublime 文本编辑器中复制粘贴,看看它们是什么类型的空格字符
所以\s*<br>\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
【问题讨论】: