批处理(bat) findstr命令使用教程--查找与替换
findstr 指令基本格式
基本格式:findstr “搜索内容” 文件路径
1. 单字符串搜索
::关闭回显,设置延迟环境变量扩展
@echo off &setlocal enabledelayedexpansion
:: 1.表示从test.txt中筛选包含 hello 的行,并导入到tmp.txt
findstr "hello" test.txt >>tmp.txt
:: 导入空行
echo=>>tmp.txt
:: 2.表示将test.txt中所有内容导入到tmp.txt
findstr . test.txt >>tmp.txt
pause
结果:
2. 多字符串搜索
@echo off &setlocal enabledelayedexpansion
findstr "hello adc" test.txt >tmp.txt
pause
指令常用参数
详细参数列表
参数 | 参数说明 |
---|---|
/B | 在一行的开始配对模式。 |
/E | 在一行的结尾配对模式。 |
/L | 按字使用搜索字符串。 |
/R | 将搜索字符串作为一般表达式使用。 |
/S | 在当前目录和所有子目录中搜索匹配文件。 |
/I | 指定搜索不分大小写。 |
/X | 打印完全匹配的行。 |
/V | 只打印不包含匹配的行。 |
/N | 在匹配的每行前打印行数。 |
/M | 如果文件含有匹配项,只打印其文件名。 |
/O | 在每个匹配行前打印字符偏移量。 |
/P | 忽略有不可打印字符的文件。 |
/OFF[LINE] | 不跳过带有脱机属性集的文件。 |
/A:attr | 指定有十六进位数字的颜色属性。请见 “color /?” |
/F:file | 从指定文件读文件列表 (/ 代表控制台)。 |
/C:string | 使用指定字符串作为文字搜索字符串。 |
/G:file | 从指定的文件获得搜索字符串。 (/ 代表控制台)。 |
/D:dir | 查找以分号为分隔符的目录列表 |
strings | 要查找的文字。 |
[drive:][path]filename | 指定要查找的文件。 |
1. 参数 /i(I) 忽略大小写
@echo off &setlocal enabledelayedexpansion
findstr /i "hello" test.txt >tmp.txt
pause
2. 参数 /C:string 查找包含空格的字符串所在行
@echo off &setlocal enabledelayedexpansion
findstr /c:"t -a" test.txt >tmp.txt
pause
结果:
3. 参数 /n 显示筛选结果的行号
@echo off &setlocal enabledelayedexpansion
findstr /n "hello" test.txt >tmp.txt
pause
注意:行尾会添加一个空格
结果:
4. 参数 /v 匹配结果反选
@echo off &setlocal enabledelayedexpansion
findstr /v "hello" test.txt >tmp.txt
pause
结果:
4. 参数 /s 递归查找
@echo off &setlocal enabledelayedexpansion
:: 搜索当前目录及子目录下所有的 .txt 文件,并查找还有 hello 字符串的行, 并显示行号
findstr /n /s "hello" *.txt >tmp.txt
pause
简单脚本应用 --文件中指定行的指定内容替换
::关闭回显,设置延迟环境变量扩展
@echo off &setlocal enabledelayedexpansion
set fileName=.\test.txt
set oldText=hello
set newText=adc
set featureText=test
echo fileName=%fileName% oldText=%oldText% newText=%newText%
if not exist %fileName% (
echo txt -hello the world!>>test.txt
echo txt -hello the home!>>test.txt
echo test -hello the game!>>test.txt
)
if defined featureText (echo featureText=%featureText%)
::单引号代表命令 . 表示所有内容
for /f "delims=" %%a in ('findstr /n . %fileName%') do (
set str=%%a
::echo !str!
rem 替换内容
if defined featureText (
rem 查找每行字符串是否包含指定的特征字符,只对包含特征字符的行替换文本
rem >null表示不显示结果
echo !str!| findstr %featureText% >nul && (
set str=!str:%oldText%=%newText%!
)
) else (
set "str=!str:%oldText%=%newText%!"
)
rem 将添加了行号的文本写入临时文件
echo !str! >>tmp.txt
)
for /f "tokens=1* delims=:" %%i in (.\tmp.txt) do (
rem 按 : 分割每行字符串
set "str=%%j"
if "!str!"==" " (
rem 写入源文件里的空行
echo=>>new_A.txt
) else (
rem 将字符串写入文本,每行会多一个空格,使用字符串的截取功能去掉末尾的一个空格
echo !str:~0,-1!>>new_A.txt
)
)
rem 删除临时文件并将修改后的文件修改为源文件
del tmp.txt&move new_A.txt %fileName%
pause
结果:
原文本内容
替换后文本内容
【出处】:https://blog.csdn.net/m0_56208280/article/details/129204353
=======================================================================================
使用powershell的replace功能
我在这里玩了一些现有的答案,更喜欢我改进的解决方案......
type test.txt | powershell -Command "$input | ForEach-Object { $_ -replace \"foo\", \"bar\" }"
或者如果要将输出再次保存到文件中......
type test.txt | powershell -Command "$input | ForEach-Object { $_ -replace \"foo\", \"bar\" }" > outputFile.txt
这样做的好处是可以管理任何程序的输出。也会考虑使用正则表达式。无法解决如何将其变成BAT文件以便于使用... :-(
在.bat中使用powershell - 适用于Windows 7+ 编码utf8是可选的,适用于网站
@echo off set ffile='myfile.txt' set fold='FOO' set fnew='BAR' powershell -Command "(gc %ffile%) -replace %fold%, %fnew% | Out-File %ffile% -encoding utf8"
如果是在Linux系统中,建议使用Sed命令,(或仅下载sed)
当您在Windows上使用Git时,只需启动
git-bash
并使用 sed。或者,在使用Windows 10时,启动“在Windows上使用Ubuntu进行Bash”(来自Linux子系统)并使用 sed 。 它是一个流编辑器,但可以使用以下命令直接编辑文件:
sed -i -e 's/foo/bar/g' filename -i 选项用于在文件名上编辑。 -e 选项表示要运行的命令。 s 用于将找到的表达式“foo”替换为“bar”, g 用于替换找到的所有匹配项。
请注意ereOn: 如果要仅在Git存储库的版本化文件中替换字符串,则可能需要使用: git ls-files <eventual subfolders & filters> | xargs sed -i -e 's/foo/bar/g'
这可以创造奇迹。
出处:https://www.orcode.com/question/6809_k5b033.html
=======================================================================================
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/17882312.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
posted on 2023-12-07 16:20 jack_Meng 阅读(2704) 评论(0) 编辑 收藏 举报