【问题标题】:sed unterminated address regexsed 未终止的地址正则表达式
【发布时间】:2021-04-22 11:53:43
【问题描述】:

以下 sed 命令在终端中有效,但是当我想将输出存储到脚本中的变量中时,它会提示我“sed: -e expression #1, char 27: unterminated address regex “消息。不知道这是什么...

Input file example:
orange
abc
def

apple
asd
edf

sed 命令获取关键字直到空白行,这在终端中工作:

sed -n '/orange/,/^$/p' temp_stage.txt

使用确切的命令存储到变量中。不工作。

my $waha = `sed -n '/orange/,/^$/p' temp_stage.txt`;

【问题讨论】:

  • 你必须转义$标志:my $waha = `sed -n '/orange/,/^\$/p' temp_stage.txt`;
  • 你到底为什么要从perl 调用sed,它具有sed 具有的所有正则表达式:以及更多内置功能?你想在$waha btw 中包含空白行吗?
  • @ted 更好一点!致 OP:当有更多标准(在这种情况下为内置)方式来做同样的事情时,你不应该调用外部命令。调用外部程序既浪费又低效。
  • @Blurman 当您在 perl 中标记了这个问题时,我只是建议通过逐行读取文件来完成此任务,如果遇到任何空行,只需 最后循环并将读取的内容存储到任何变量或文件中。就是这样:)
  • 我正在考虑将所有行减少为 1... 我想我错了。好的,然后我将继续逐行读取文件。谢谢谢谢

标签: perl sed


【解决方案1】:

这是一个完全不使用sed 的版本。

#!/usr/bin/perl

use strict;
use warnings;

my $filename = 'temp_stage.txt';

my $waha;

open my $fh, $filename or die("$0: $filename: $!");
while(<$fh>) {
    # concatenate the lines from "orange" to blank (inclusive)
    $waha .= $_ if(/orange/ .. /^$/);
}
close($fh);

print "$waha";

有关用于捕获范围的 .. 运算符,请参见 perlop - Range-Operators

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多