我的目标是创建批处理脚本,从css文件等文件中删除行本身(如果可能)或给定行中的文本。
css文件
line
199
200 /* K2START */
201 .foo { width: 1 }
202 .bar { width: 2 }
203 /* K2END */
204
我想删除行200
和行203
(包括评论部分)之间的文字。可以更改行号,因为其他人可能会在文件中添加更多文本。因此,我的选择是找到文本K2START
和K2END
,然后在这些行之间删除文字。
批处理脚本
这会返回"200: /* K2START */"
,这很棒。但我无法弄清楚如何获得行号值“200”并使用它。
findstr /N "K2START" "%K2DIR%\K2 smartforms Designer\Styles\Themes\Sun.css"
我还尝试遍历css文件的每一行来练习循环,但不管怎么说,不是进入css文件中的每一行文本,整个路径字符串(即"%K2DIR%\K2 smartforms Designer\Styles\Themes\Sun.css"
)都被视为标记。 / p>
FOR /F "tokens=*" %%G IN ("%K2DIR%\K2 smartforms Designer\Styles\Themes\Sun.css") DO (
@echo %%G
)
答案 0 :(得分:3)
@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
答案 1 :(得分:1)
如果您可以使用gnu awk在Microsoft环境中运行,
awk -f hunter.awk file.txt
hunter.awk:
BEGIN {printing=1;} /\/* K2START \*\// { printing=0; next; } /\/* K2END \*\// { printing=1; next; } { if ( printing ) print; }
答案 2 :(得分:1)
这适用于GnuSed - 一个非常宝贵的工具。
sed "/\/\* K2START \*\//,/\/\* K2END \*\//d" file.css >newfile.css
语法是这样的,其中d是从开始文本删除到结束文本
sed“/ start /,/ end / d”file.txt
由于\和*
的转义,它看起来很乱