2

私はASCIIファイルを持っていて、そこのどこかに行があります:BEGINとその後の行:END

Windowsのコマンドライン呼び出しから、これら2行とその間のすべてを削除できるようにしたいと思います。これは完全に自動化する必要があります。

編集: Vista で sed を参照してください - 間のすべてのシンボルを削除する方法は? sed を使用してこれを行う方法の詳細については (cygwin には sed があります)。

編集: SED が機能している可能性があることを発見しましたが、出力をファイルにパイプすると、改行が削除されました。どうすればこれらを保持できますか? この sed 正規表現を使用する:

/^GlobalSection(TeamFoundationVersionControl) = preSolution$/,/^EndGlobalSection$/{ /^GlobalSection(TeamFoundationVersionControl) = preSolution$/!{ /^EndGlobalSection$/!d } }

.. 開始セクションは 'GlobalSection(TeamFoundationVersionControl) = preSolution' で、終了セクションは 'EndGlobalSection' です。これらの行も削除したいと思います。

編集:私は今、sedにもっと簡単なものを使用しています:

/^GlobalSection(TeamFoundationVersionControl) = preSolution$/,/^EndGlobalSection$/d

改行はまだ問題ですが

4

3 に答える 3

1

あるいは、私が最近使用しているのは、そのようなタスクのためにRubyやPythonなどのウィンドウでうまく機能するスクリプト言語です。RubyはWindowsに簡単にインストールでき、この子供の遊びのような問題を引き起こします。

次のようなスクリプトを使用できます: cutBeginEnd.rb myFileName.txt

sourcefile = File.open(ARGV[0])

# Get the string and do a multiline replace
fileString = sourceFile.read()
slicedString = fileString.gsub(/BEGIN.*END\n/m,"") 

#Overwrite the file
sourcefile.pos = 0                
sourcefile.print slicedString             
sourcefile.truncate(f.pos)  

これはかなり良い仕事をし、多くの柔軟性を可能にし、そしておそらくsedよりも読みやすいです。

于 2009-01-09T01:04:54.223 に答える
1

これは、必要なことを実行する 1 行の Perl コマンドです (コマンド プロンプト ウィンドウから入力するだけです)。

perl -i.bak -ne "print unless /^BEGIN\r?\n/ .. /^END\r?\n/" myfile.txt

キャリッジ リターンとライン フィードは適切に保持されます。の元のバージョンはmyfile.txtとして保存されmyfile.txt.bakます。

Perl をインストールしていない場合は、ActivePerlを入手してください。

于 2009-01-09T16:56:29.490 に答える
0

C# 正規表現を使用して GlobalSection(TeamFoundationVersionControl) = preSolution セクション全体を削除する方法は次のとおりです。

// Create a regex to match against an entire GlobalSection(TeamFoundationVersionControl) section so that it can be removed (including preceding and trailing whitespace).
// The symbols *, +, and ? are greedy by default and will match everything until the LAST occurrence of EndGlobalSection, so we must use their non-greedy counterparts, *?, +?, and ??.
// Example of string to match against: "    GlobalSection(TeamFoundationVersionControl) ...... EndGlobalSection     "
Regex _regex = new Regex(@"(?i:\s*?GlobalSection\(TeamFoundationVersionControl\)(?:.|\n)*?EndGlobalSection\s*?)", RegexOptions.Compiled);
于 2011-09-30T17:08:02.687 に答える