【发布时间】:2022-01-23 10:11:14
【问题描述】:
这是我的原始字符串:
NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
我只想在 ':' 之前的所有空格中添加反斜杠
所以,这就是我最终想要的:
NetworkManager/system\ connections/Wired\ 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
我需要在 bash 中执行此操作,因此,sed、awk、grep 对我来说都可以。
我尝试过关注 sed,但它们都不起作用
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/ .*\(:.*$\)/\\ .*\1/g'
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/\( \).*\(:.*$\)/\\ \1.*\2/g'
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/ .*\(:.*$\)/\\ \1/g'
echo NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 | sed 's/\( \).*\(:.*$\)/\\ \1\2/g'
感谢您回答我的问题。 我对stackoverflow还是很陌生,我不知道如何控制评论中的格式。 所以,我只是编辑我原来的问题
我的真实故事是:
当我执行 grep 或使用 cscope 搜索关键字时,例如 /etc 文件夹下的“address1”。 结果是这样的:
./NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
如果我使用 vim 打开光标下的文件,假设我的 vim 光标现在位于单词“NetworkManager”上, 那么vim会将其理解为
"./NetworkManager/system"
这就是为什么我想在空格前添加“\”,这样搜索结果会更 vim 友好:)
我确实尝试过更改 cscope 的源代码,但很难完全做到这一点。所以必须做一个帖子替换:(
【问题讨论】:
-
如果您可以使用支持
\K(重置匹配开始并丢弃所有先前匹配的字符)和\G(将位置设置在末尾的位置)的平台前一个匹配或在第一个匹配之前的字符串开头),您可以使用以下正则表达式执行替换:^[^:]*?\K |\G[^:]*?\K。 (每个\K后面都有一个空格。)Demo。将光标悬停在链接上正则表达式的每个元素上,以获得对其功能的解释。 -
这听起来很像XY Question,您试图通过转义它们而不是引用您的字符串来解决输入中的空格问题,特别是考虑到您的
echo缺少引号的问题。你对那些让你认为需要在空格前添加反斜杠的字符串做了什么? -
@EdMorton 感谢您的提问。我的真实故事是:当我执行 grep 或使用 cscope 在 /etc 文件夹下搜索关键字“address1”时。结果将是: ./NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1 如果我使用 vim 打开光标下的文件,假设我的 vim 光标现在位于单词“NetworkManager ",那么vim会把它理解为"./NetworkManager/system",所以我想在空格前加上"\",这样搜索结果会更vim友好:)
-
作为一个几乎每天使用
grep和cscope大约30 年的人,我从来没有遇到过这个问题。我一直使用vi而不是vim,但我从未尝试从vi内部打开文件。根据我们在这里看到的问题,似乎很多人使用vim来处理更适合 shell 的事情!