gar*_*y69 3 regex perl awk sed
我有一个包含这样的行的文件
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仅在特定字符模式之间替换短划线
有人可以帮忙吗?
不要使用正则表达式来解析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;
Run Code Online (Sandbox Code Playgroud)
输出:
some thing <phrase>a_phrase</phrase> some thing else <phrase>other_stuff</phrase>
Run Code Online (Sandbox Code Playgroud)
更新: Mojolicious甚至包含一些糖,允许将该代码粉碎成oneliner:
$ perl -Mojo -pe '($_=x($_))->find("phrase")->each(sub{$_->content($_->content=~tr/ /_/r)})' input.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |