Shell 在括号之间添加/修改文本
我正试着做一篇分类文章,但我在转弯时遇到了问题Shell 在括号之间添加/修改文本,shell,perl,text-files,Shell,Perl,Text Files,我正试着做一篇分类文章,但我在转弯时遇到了问题 (第1类(第1子类)(第2子类第1项第2项)) 到 (第1类(第1子类第1项)(第2子类第1项第2项)) 我不知道如何将上面的文本转换为下面的文本,而不在内存中缓存子类1。我在Linux上使用Perl,所以欢迎使用shell脚本或Perl的任何解决方案 编辑:我尝试过使用grep,将整个子类1保存在一个变量中,然后修改并导出到列表中;但是列表可能会变大,这样会占用大量内存 我不知道如何把上面的文字改成下面的文字 一般做法: 解析文本 您似乎有空
(第1类(第1子类)(第2子类第1项第2项))
到
(第1类(第1子类第1项)(第2子类第1项第2项))
我不知道如何将上面的文本转换为下面的文本,而不在内存中缓存子类1
。我在Linux上使用Perl,所以欢迎使用shell脚本或Perl的任何解决方案
编辑:我尝试过使用grep,将整个子类1
保存在一个变量中,然后修改并导出到列表中;但是列表可能会变大,这样会占用大量内存
我不知道如何把上面的文字改成下面的文字
一般做法:
{
type => 'list',
value => [
{
type => 'atom',
value => 'class1',
},
{
type => 'list',
value => [
{
type => 'atom',
value => 'subclass1',
},
]
},
{
type => 'list',
value => [
{
type => 'atom',
value => 'subclass2',
},
{
type => 'atom',
value => 'item1',
},
{
type => 'atom',
value => 'item2',
},
],
}
],
}
sub serialize {
my ($node) = @_;
return $node->{type} eq 'list'
? "(".join(" ", map { serialize($_) } @{ $node->{value} }).")"
: $node->{value};
}
可能会生成更简单的内容,但您对格式的详细信息了解得很少my $item = $tree->{value}[2]{value}[1]{value};
my $new_atom = { type => 'atom', value => $item };
push @{ $tree->{value}[1]{value} }, $new_atom;
my $item = $tree->{value}[2]{value}[1]{value};
my $new_atom = { type => 'atom', value => $item };
push @{ $tree->{value}[1]{value} }, $new_atom;
{
type => 'list',
value => [
{
type => 'atom',
value => 'class1',
},
{
type => 'list',
value => [
{
type => 'atom',
value => 'subclass1',
},
]
},
{
type => 'list',
value => [
{
type => 'atom',
value => 'subclass2',
},
{
type => 'atom',
value => 'item1',
},
{
type => 'atom',
value => 'item2',
},
],
}
],
}
sub serialize {
my ($node) = @_;
return $node->{type} eq 'list'
? "(".join(" ", map { serialize($_) } @{ $node->{value} }).")"
: $node->{value};
}
根据具体情况,还可以使用其他方法。@JosephSible编辑了它。分享你的研究成果对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另见:。F.ex。您的问题没有解释您如何推导需要插入的内容,即为什么需要插入
item1
?