【问题标题】:Find a line and replace the corresponding next line找一行并替换对应的下一行
【发布时间】:2021-11-30 00:05:44
【问题描述】:

我正在尝试查找用户 ID 并使用新密码更改现有密码。

示例文件:

$TestDBUser=TestUsr12
$TestDBPass=Rxa97Gtwbp/UcC

现在假设上述组合在一个文件中存在 100 次,我需要更改 TestUsr12 的更新密码

预期输出:

$TestDBUser=TestUsr12
$TestDBPass=Ymw0tiwbplqxc

我曾尝试在扩展搜索模式下使用 \n 使用记事本 ++ 执行此操作,但不知何故它不适用于所有此类列表。 在一个文件中,不同的 id 有多个这样的组合,需要用相应 id 的新组合替换。

【问题讨论】:

  • 你为什么使用 shell、unix 和 notepad++ 标签?据我所知,notepad++ 适用于 Windows。您应该阅读有关 regexp 的信息并使用类似将“TestDBUser=.*”替换为“TestDBUser=blablabla”
  • sed -e 's@Rxa97Gtwbp/UcC@Ymw0tiwbplqxc@g'
  • 嗨,威廉,使用上面的 sed 命令,它将在任何地方用新密码替换现有密码,但是根据创建的新密码,所有用户 id 的密码都不同,以前的密码对于不同的用户 id 是相同的。
  • @Saboteur 我尝试按照 unix 命令 sed '/$TestDBUser=TestUsr12/!b;n;c$TestDBPass=Ymw0tiwbplqxc' 因为我不确定要在记事本++中的正则表达式中使用的确切表达式。

标签: shell unix notepad++


【解决方案1】:

使用 Notepad++,你可以做到:

  • Ctrl+H
  • 查找内容:\$TestDBUser=TestUsr12\R\$TestDBPass=\KR.+$
  • 替换为:Ymw0tiwbplqxc
  • 检查 匹配大小写
  • 检查 环绕
  • CHECK 正则表达式
  • 取消选中 . matches newline
  • 全部替换

说明:

\$TestDBUser=TestUsr12      # literally
\R                          # any kind of linebreak
\$TestDBPass=               # literally
\K                          # forget all we have seen until this position
.+                          # 1 or more any character but newline
$                           # end of line

替换:

Ymw0tiwbplqxc           # the new pswd

屏幕截图(之前):

截图(之后):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2016-09-19
    相关资源
    最近更新 更多