gpt4 book ai didi

regex - sed 用下划线替换 2 个字符串之间的空格

转载 作者:行者123 更新时间:2023-12-01 07:33:20 25 4
gpt4 key购买 nike

我有一个包含这样的行的文件
some thing <phrase>a phrase</phrase> some thing else <phrase>other stuff</phrase>
我需要替换 <phrase> 之间的所有空格带下划线的标签。所以基本上我需要替换掉在 > 之间的每个空格和 </带下划线。我在 sed、awk 和 perl 中尝试了许多不同的命令,但没有任何东西可以工作。以下是我尝试过的一些命令。
sed 's@>\s+[</]@_@g'perl -pe 'sub c{$s=shift;$s=~s/ /_/g;$s}s/>.*?[<\/]/c$&/ge'sed 's@\(\[>^[<\/]]*\)\s+@\1_@g'awk -v RS='\\[>^[<\]/]*\\]' '{ gsub(/\<(\s+)\>/, "_", RT); printf "%s%s", $0, RT }' infile
我一直在研究这两个问题,试图修改答案以使用我需要的字符。
sed substitute whitespace for dash only between specific character patterns

https://unix.stackexchange.com/questions/63335/how-to-remove-all-white-spaces-just-between-brackets-using-unix-tools

有人可以帮忙吗?

最佳答案

不要使用正则表达式来解析 XML/HTML。

use warnings;
use 5.014; # for /r modifier
use Mojo::DOM;

my $text = <<'ENDTEXT';
some thing <phrase>a phrase</phrase> some thing else <phrase>other stuff</phrase>
ENDTEXT

my $dom = Mojo::DOM->new($text);
$dom->find('phrase')->each(sub { $_->content( $_->content=~tr/ /_/r ) });
print $dom;

输出:
some thing <phrase>a_phrase</phrase> some thing else <phrase>other_stuff</phrase>

更新: Mojolicious甚至包含一些糖,允许将代码粉碎成一个单行:
$ perl -Mojo -pe '($_=x($_))->find("phrase")->each(sub{$_->content($_->content=~tr/ /_/r)})' input.txt

关于regex - sed 用下划线替换 2 个字符串之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com