1

私の目標は、css ファイルなどのファイルから行自体 (可能であれば) または特定の行のテキストを削除するバッチ スクリプトを作成することです。

cssファイル

line
199
200      /* K2START */
201      .foo { width: 1 }
202      .bar { width: 2 }
203      /* K2END */
204

200行と行の間のテキスト203(コメント部分を含む)を削除したい。他の人がファイルにテキストを追加する可能性があるため、行番号が変更される可能性があります。したがって、私のオプションは、テキストを見つけてから、それらの行の間のテキストK2STARTK2END削除することです。

バッチ スクリプト

これ"200: /* K2START */"は素晴らしいです。しかし、行番号の値「200」を取得して使用する方法がわかりません。

findstr /N "K2START" "%K2DIR%\K2 smartforms Designer\Styles\Themes\Sun.css" 

また、css ファイルの各行をループしてループを練習しようとしましたが、どういうわけか css ファイルのテキストの各行に入る代わりに、パス文字列全体 (つまり"%K2DIR%\K2 smartforms Designer\Styles\Themes\Sun.css") がトークンとして扱われます。

FOR /F "tokens=*" %%G IN ("%K2DIR%\K2 smartforms Designer\Styles\Themes\Sun.css") DO (
@echo %%G
)
4

3 に答える 3

4
@echo off
setlocal

rem Get start and end line numbers of the unwanted section
set start=
for /F "delims=:" %%a in ('findstr /N "K2START K2END" "smartforms Designer\Styles\Themes\Sun.css"') do (
   if not defined start (
      set start=%%a
   ) else (
      set end=%%a
   )
)

rem Copy all lines, excepting the ones in start-end section
(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "smartforms Designer\Styles\Themes\Sun.css"') do (
   if %%a lss %start% echo(%%b
   if %%a gtr %end% echo(%%b
)) > newFile.css
于 2013-06-15T19:32:39.377 に答える
1

これは非常に貴重なツールである GnuSed で機能します。

sed "/\/\* K2START \*\//,/\/\* K2END \*\//d" file.css >newfile.css

構文は次のようになります。d は、開始テキストから終了テキストまでを削除します。

sed "/start/,/end/d" file.txt

\ と * がエスケープされているため、乱雑に見えます。

于 2013-06-16T02:56:55.690 に答える
1

Microsoft 環境のように見える gnu awk を実行できる場合は、

awk -f ハンター.awk ファイル.txt

ハンター.awk:

BEGIN {printing=1;}
/\/* K2START \*\// { 印刷 = 0; 次; }
/\/* K2END \*\// { 印刷 = 1; 次; }
                        { if (印刷) print; }

http://gnuwin32.sourceforge.net/でGnuWin32プロジェクトをお勧めします。

于 2013-06-15T19:30:34.737 に答える