使用 perl 在两行之间插入新行

发布于 2024-12-20 18:17:55 字数 151 浏览 1 评论 0原文

我想在第 2 行和第 3 行之间插入包含此行

abc
abcd:
abc
abcd

输出中的连接字符串的行:

abc
abcd:
abcd: abcd
abc
abcd

I want to insert line beetwen line 2 and line 3 that contain concatenate string from this lines

abc
abcd:
abc
abcd

Output:

abc
abcd:
abcd: abcd
abc
abcd

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缪败 2024-12-27 18:17:55

您想在以冒号结尾的行之后或第 2 行之后添加一些内容吗?

如果在第 2 行之后,您可以 split("\n", $string) 获取行数组,将新行拼接到数组的位置 2 中,然后 join(" \n", @array) 来获取字符串。

如果在以冒号结尾的行之后,您可以使用正则表达式:s/(:\n)/\1YOUR_NEW_LINE_HERE\n/

You want to add something after a line that ends with a colon, or after line 2?

If after line 2, you can split("\n", $string) to get an array of lines, splice the new line into the array in position 2, and then join("\n", @array) to get the string back.

If after the line ending in the colon, you can use a regex: s/(:\n)/\1YOUR_NEW_LINE_HERE\n/.

初心未许 2024-12-27 18:17:55

由于您没有指定要在以冒号结尾的每一行后面放置的内容,因此我创建了一个表来代表一些通用决策和稍微灵活的处理。

# create a table
my %insert_after 
    = ( abcd => "abcd: abcd\n"
      , defg => "defg: hijk\n"
      );

# create a list of keys longest first, and then lexicographic 
my $regs  
    = '^(' 
    . join( '|', sort { length $b <=> length $a or $a cmp $b } 
                 keys %insert_after 
          )
    . '):

在当前行之后“插入”一行就像将该文本附加到当前行并输出一样简单。

; my $regex = qr/$regs/; # process lines. while ( <> ) { m/$regex/ and $_ .= $insert_after{ $1 } // ''; print; }

在当前行之后“插入”一行就像将该文本附加到当前行并输出一样简单。

Since you don't specify what you want to put after each line that ends with a colon, I've created a table to stand for some generic decision-making and somewhat flexible handling.

# create a table
my %insert_after 
    = ( abcd => "abcd: abcd\n"
      , defg => "defg: hijk\n"
      );

# create a list of keys longest first, and then lexicographic 
my $regs  
    = '^(' 
    . join( '|', sort { length $b <=> length $a or $a cmp $b } 
                 keys %insert_after 
          )
    . '):

"Inserting" a line after the current one is as easy as appending that text to the current one and outputting it.

; my $regex = qr/$regs/; # process lines. while ( <> ) { m/$regex/ and $_ .= $insert_after{ $1 } // ''; print; }

"Inserting" a line after the current one is as easy as appending that text to the current one and outputting it.

雨落□心尘 2024-12-27 18:17:55
perl -p -i.bck -e "if ($last ne ''){ $_=~s/.*/$last 
amp;\\n
amp;/; $last=''} elsif (/:/) {$last = $_;chomp($last);} else {$last = '';}" test

test 是有问题的文件

perl -p -i.bck -e "if ($last ne ''){ $_=~s/.*/$last 
amp;\\n
amp;/; $last=''} elsif (/:/) {$last = $_;chomp($last);} else {$last = '';}" test

test is the file in question

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文