【问题标题】:New Line Character in Linux Prompt?Linux 提示符中的换行符?
【发布时间】:2011-10-25 05:07:54
【问题描述】:

我在 Perl 中使用 qx 在 Linux 机器上执行命令。

我正在尝试在 Perl 中解析一些输出,但不知道如何替换多行输出中的换行符。

我一直在尝试这样的事情:

$result =~ s/\\n/||/g;

我似乎记得在某些操作系统中使用了 '\r',并且我一直在尝试使用 '\n' 的不同组合。

另外,我开始有一堆看起来像这样的线条,并希望将它们组合起来:

$result =~ s/ bytes from /|/g;
$result =~ s/ \(/|/g;

【问题讨论】:

  • 在Linux中是'\n',在Windows中是'\r\n'
  • 感谢wong2,您的评论有帮助。我几乎是正确的,但我不需要第二个反斜杠。
  • @wong2,不,在 Windows 上它也是 \n,因为 CR LF 在读取时转换为 LF。

标签: linux perl newline


【解决方案1】:

如果\ 是特殊序列的开头(如果它后跟一个字母),或者它会导致下一个字符按字面意思匹配(如果它后跟一个非字母)。因此,

s/\\n/

匹配\,后跟n\n 是匹配换行符的特殊序列,所以你想要

/\n/

所以你可以使用

my $result = qx{ ... };
$result =~ s/\n/||/g;

perlre


关于其他的,

$result =~ s/ bytes from /|/g;
$result =~ s/ \(/|/g;

很简单

$result =~ s/ bytes from | \(/|/g;

【讨论】:

  • @John R,Ack,我傻了,我的解决方案中仍然存在额外的斜线。为您的第二个问题添加了答案。
【解决方案2】:

一方面,您不应该使用双反斜杠。

你可以这样做:

$text = <<EOS;
div class equals main
span id equals marquee
blog! slash span slah div
EOS

print "Before: $text \n\n\n\n";

$text =~ s/\n/\|\|/g;

print "After: $text \n\n\n\n";

这是它的键盘:http://codepad.org/k0oA2YX4

【讨论】:

    猜你喜欢
    • 2015-07-07
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2020-11-30
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多