这是我原来的字符串:
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的源代码,但很难完全实现这一点。所以必须进行后期更换:(
如果您只想在字符串中存在时进行替换:,则可以检查是否至少有 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)