如何正则表达式替换冒号之前?

hua*_*ngw 3 regex awk sed

这是我原来的字符串:

NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
Run Code Online (Sandbox Code Playgroud)

我只想在 ':' 之前的所有空格中添加反斜杠

所以,这就是我最终想要的:

NetworkManager/system\ connections/Wired\ 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
Run Code Online (Sandbox Code Playgroud)

我需要在 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'
Run Code Online (Sandbox Code Playgroud)

谢谢回答我的问题。我对 stackoverflow 还是个新手,我不知道如何控制评论中的格式。所以,我只是编辑我原来的问题

我的真实故事是:

当我执行 grep 或使用 cscope 搜索关键字时,例如 /etc 文件夹下的“address1”。结果会是这样的:

./NetworkManager/system connections/Wired 1.nmconnection:14 address1=10.1.10.71/24,10.1.10.1
Run Code Online (Sandbox Code Playgroud)

如果我使用 vim 打开光标下的文件,假设我的 vim 光标现在位于单词“NetworkManager”,那么 vim 会将其理解为

“./网络管理器/系统”

这就是为什么我想在空格前添加“\”,这样搜索结果会更vim友好:)

我确实尝试过更改cscope的源代码,但很难完全实现这一点。所以必须进行后期更换:(

The*_*ird 5

如果您只想在字符串中存在时进行替换:,则可以检查是否至少有 2 列,将(输出)字段分隔符设置为冒号。

数据:

cat file                                                                                                                                       michaelvandam@Michaels-MacBook-Pro
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%
Run Code Online (Sandbox Code Playgroud)

示例awk

awk 'BEGIN {FS=OFS=":"}{if(NF>1)gsub(" ","\\ ",$1)}1' file
Run Code Online (Sandbox Code Playgroud)

输出

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
Run Code Online (Sandbox Code Playgroud)