【问题标题】:How to replace a character before and after a match如何在匹配之前和之后替换字符
【发布时间】: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__&lt;br&gt;___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*&lt;br&gt;\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

【问题讨论】:

    标签: perl awk sed


    【解决方案1】:

    Perl 版本:

    echo "test  test  <br>   test  test" | perl -CSD -pe 's[\s*<br>\s*][$& =~ s/\s/_/gr]ge'
    

    对于不工作的情况,运行此命令并粘贴结果:

    echo "for messages:<br>        # This" | 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
    

    【讨论】:

    • 我用您的有效解决方案更新了我的问题。我面临着另一个空间问题。你能过吗
    • 我已经用您提出的输出更新了我的问题。它的不同
    • 我发现那是nbsp。我将用空格替换 nbsp 然后我将使用答案。谢谢
    • 提示:$v=$1; $v =~ s/ /_/g; "$v"可以写成$1 =~ s/ /_/gr
    • @SanthoshYedidi, Use -CSD (perl -CSD -pe'...') 这将对输入进行解码并对输出进行编码,以便 $_ 实际上包含一个 NBSP,以便 \s 匹配它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2019-11-23
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多