在我的场景中,我需要检查我的文件(XXX.txt
)中是否有“点“。点文件中的单词。
现在我需要一个脚本来编写“点”单词,新建一个文本框,命名为“ done.txt
”。
例子XXX.txt
dfsfs
clip_id HDX
title Setiap hari
type PROMO
end
clip_id HDQ
title Citra
type SPOT
end
clip_id HDX
title Ri
type PROMO
end
clip_id HDX
title sni
type SPOT
所以我需要done.txt
按照下面写“”。
clip_id HDQ
title Citra
clip_id HDX
title sni
请提供执行此操作的脚本。
非常感谢
答案1
以下是微软的 cmd 继任者 Powershell 中的解决方案:
# variables that you need to set
$source = "C:\temp\superuser.txt"
$destination = "C:\temp\done.txt"
#region easier to understand for PS newcomers
$hits = select-string -Path $source -SimpleMatch "SPOT" -CaseSensitive
$filecontents = get-content $source
foreach($hit in $hits)
{
$filecontents[$hit.linenumber-3] | out-file -append $destination
$filecontents[$hit.linenumber-2] | out-file -append $destination
"" | out-file -append $destination
}
#endregion
#region shorter version
$hits = select-string -Path $file -SimpleMatch "SPOT" -CaseSensitive -context 2
foreach($hit in $hits)
{
$hit.context.PreContext | out-file -append $destination
"" | out-file -append $destination
}
#endregion
答案2
我强烈推荐JREPL.BAT - 执行正则表达式文本替换的混合 JScript/批处理实用程序。JREPL.BAT 是纯脚本,可以在 XP 及更高版本的任何 Windows 平台上本地运行。
假设 JREPL.BAT 位于您当前的目录中,或者更好的是,位于 PATH 中的某个位置,那么一个简单的命令行单行代码就可以有效地解决您的问题:
jrepl "^((.*\n){2})type SPOT$" $1 /m /jmatch /f xxx.txt /o done.txt
- 多行选项
/M
允许跨换行符进行搜索。 - 该
/JMatch
选项仅打印匹配的替换字符串
由于 JREPL 是一个批处理脚本,因此如果在另一个脚本中使用它,则必须使用 CALL JREPL。
使用 可以从命令行获取完整文档jrepl /?
。您可能希望使用jrepl /?|more
一次查看一页帮助。我从不使用 MORE,因为我的 cmd.exe 控制台窗口配置了一个大的输出缓冲区,使我能够向上滚动以查看过去的输出。