我想使用类似grep的功能过滤各种日志文件。
我以前做的方式是:
对于此过程,我记录了一个宏并将其存储在shortcuts.xml
中:
<Macros>
<Macro name="Trim Trailing and save" Ctrl="no" Alt="yes" Shift="yes" Key="83">
<Action type="2" message="0" wParam="42024" lParam="0" sParam="" />
<Action type="2" message="0" wParam="41006" lParam="0" sParam="" />
</Macro>
<Macro name="grep01" Ctrl="no" Alt="no" Shift="no" Key="0">
<Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1601" wParam="0" lParam="0" sParam="IM1 001" />
<Action type="3" message="1625" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1702" wParam="0" lParam="784" sParam="" />
<Action type="3" message="1701" wParam="0" lParam="1615" sParam="" />
<Action type="2" message="0" wParam="43051" lParam="0" sParam="" />
</Macro>
是否可以用通配符或实际的标记文本替换字符串"IM1 001"
,然后只需按组合键即可完成工作?
答案 0 :(得分:0)
答案 1 :(得分:0)
EmEditor具有可以执行此操作的书签功能。在查找对话框中,输入您的字符串,然后单击书签代替查找。然后编辑>书签>该文档,您可以删除或提取到新文件,甚至可以反转加书签的行,然后继续删除或提取等。
答案 2 :(得分:0)
好奇地想知道PowerShell这样的功能是怎么做的(我几乎一无所知),并提出了以下建议。这将覆盖原始文件,而我仅对其进行了非常快速的测试,因此显然不要将其与未备份的任何东西一起使用:)
PowerShell脚本(removelines.ps1):
# https://stackoverflow.com/a/30534991/957246
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
$title = 'Search'
$msg = "The string to search for (lines that do not contain this string will be removed)."
$text = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
$c = Get-Content $args[0] | where { $_ -match $text }
$c | Set-Content $args[0]
要在记事本++中的“运行”框中保存的命令:
powershell.exe -ExecutionPolicy Unrestricted -NoLogo -File "<Path to script goes here>\removelines.ps1" "$(FULL_CURRENT_PATH)"
运行它(使用您要修改的文件打开/在当前选项卡上)时,系统将提示您输入搜索字符串。运行该文件后,Notepad ++将提示重新加载文件-现在该文件应丢失任何不包含搜索字符串的行。
答案 3 :(得分:0)
我不确定您是否对这个问题有满意的答案,但是从听起来来看,您可以完全在notepad ++中使用正则表达式查找并替换。
例如给出的来源:
Line 1: lorem ipsum
Line 2: test test test
Line 3: test IM1 001 test test
Line 4: IM1 001
Line 5: nothing here
Line 6: aaaaaaaaaaaaaaaaaIM1 001aaaaaaaaaa
Line 7: active
Line 8: inactive
Line 9: value
Line 10: blah blah
Line 11: …..
Line 12: …..
Line 13: this contains the IM1 001
替换::^(?:(?!IM1 001).)*?$\R*
(其中IM1 001
是您要查找的文本/表达式)
使用:
剩下的就是带有您指定的搜索词组的行:
Line 3: test IM1 001 test test
Line 4: IM1 001
Line 6: aaaaaaaaaaaaaaaaaIM1 001aaaaaaaaaa
Line 13: this contains the IM1 001
如果要保留空行,只需从表达式末尾删除\R*
:
Line 3: test IM1 001 test test
Line 4: IM1 001
Line 6: aaaaaaaaaaaaaaaaaIM1 001aaaaaaaaaa
Line 13: this contains the IM1 001