0

ダッシュ (-) で始まる行を含むファイルを処理する必要があります。これらは、前の行に追加する必要がある継続行です。だから私が持っているのは次のようなものです:

  Lorem ipsum dolor sit amet, consectetur 
  - adipiscing elit. Donec 
  - consectetur lotis. 
  Sed a est dui.
  Curabitur placerat a tortor
  - vel sodales.

そして私が欲しいのは:

Lorem ipsum dolor sit amet, consectetur - adipiscing elit. Donec - consectetur lotis.
Sed a est dui. 
Curabitur placerat a tortor - vel sodales.

だから私はこのようなものを書いた:

$s = ""
cat $f |%{
    if ($_ -match "^-") { $s += $_ } else { $s; $s = $_; }
} |out-file x.txt

私の質問は次のとおりです。ファイルが破線で終わる場合、スクリプトは最終行を出力しません。これは、パイプから最終行を受け取ったときに、それが最終行であることを認識していないためです。

Perl では、END {} のような構文を使用してこれらのことを行うことができました。それは Powershell でどのように処理されますか?

アップデート

Perl は適切です。なぜなら、その言語では次のようなことができるからです (txt関連するテキストを含むファイルはどこにありますか):

perl -lne '
   BEGIN { $s = "" };
   if (/^-/) { $s .= $_ } else { print $s; $s = $_; }
   END { print $s; }
   ' txt 

ご覧のとおり、END{} コンストラクトが問題を解決します

4

2 に答える 2

0

先頭のスペースがデータ ソースに含まれているかどうかは不明です。

ファイルが数メガバイトより小さい場合は、すべてのデータをメモリに読み込んで改行を削除するのが最も簡単です。

このプログラムは

use strict;
use warnings;

my $data = do {
  local $/;
  <DATA>;
};

$data =~ s/\s*\n\s+-/ -/g;

print $data;

__DATA__
Lorem ipsum dolor sit amet, consectetur 
  - adipiscing elit. Donec 
  - consectetur lotis. 
  Sed a est dui.
  Curabitur placerat a tortor vel sodales.

出力

Lorem ipsum dolor sit amet, consectetur - adipiscing elit. Donec - consectetur lotis. 
  Sed a est dui.
  Curabitur placerat a tortor vel sodales.
于 2013-11-13T23:57:22.213 に答える