如何在记事本中删除没有字符串的行

时间:2019-02-19 10:32:38

标签: notepad++

我想使用类似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",然后只需按组合键即可完成工作?

4 个答案:

答案 0 :(得分:0)

不可能:

  

记录为宏的搜索始终将其所有参数硬连线。

请参阅here on notepad++ community

答案 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