【问题标题】:Replace pwd with USER in a file在文件中将 pwd 替换为 USER
【发布时间】:2014-09-07 17:42:47
【问题描述】:

我知道这对于任何高级 Vim 程序员来说都是一件很容易的事情,但我已经尝试了几个小时来寻找解决方案。

在我的结果文件中,有如下几行:

/Users/name/Project/Task1/folder1 : INFO : Random Info message

这里,/Users/name/Project/Task1/folder1 是我的pwd,即当前工作目录。

我想用“USER”替换文件中上面所有出现的密码。我该怎么做?

【问题讨论】:

    标签: search vim replace macvim


    【解决方案1】:
    :%s@/Users/name/Project/Task1/folder1@USER@g
    

    :%s@<C-r>=getcwd()<CR>@USER@g
    

    【讨论】:

    • 我不想尝试第一个命令,因为它是手动的并且需要时间来修复,因为我的路径很长并且路径中有空格。
    • 我尝试了第二个命令但得到以下错误:E486: Pattern not found: &lt;C-r&gt;=getcwd()&lt;CR&gt;
    • 输入 Ctrl + R 然后 =getcwd() 然后回车。
    【解决方案2】:

    如果我理解正确,您可以像这样简单地使用 search and replace functionality 并转义 / 字符:

    :%s/\/Users\/name\/Project\/Task1\/folder1/USER/
    

    如果您需要替换多个当前工作目录(因此希望pwd 是动态的),使用sed 之类的东西可能更容易:

    sed "s~$(pwd)~USER~" < file
    

    请注意~ 用作命令的分隔符而不是/,这样我们就不需要在路径中转义/

    【讨论】:

    • 谢谢。我知道基本的搜索和替换。我需要确认是否有办法在搜索和替换命令中使用 $pwd 输出。
    • 我尝试了您提到的see 命令,但它不起作用,因为我的pwd 的目录名称中有空格。它给出了以下错误:sed: 1: "s~/Users/name/Box": unterminated substitute pattern
    • 我的错,sed 模式应该在 " 中,我现在将它们添加到答案中。
    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 2012-03-29
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多