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

如果您可以让 gnu awk 在看起来像 Microsoft 的环境中运行,

awk -f 猎人.awk 文件.txt

猎人.awk:

开始{打印=1;}
/\/* K2START \*\// { 打印=0; 下一个; }
/\/* K2END \*\// { 打印=1; 下一个; }
                        { 如果(打印)打印;}

我可以在http://gnuwin32.sourceforge.net/上推荐GnuWin32项目。

于 2013-06-15T19:30:34.737 回答
1

这适用于 GnuSed - 一个非常宝贵的工具。

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

语法是这样的,其中d是从开始文本删除到结束文本

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

由于 \ 和 * 的转义,它看起来很乱

于 2013-06-16T02:56:55.690 回答