linux - 使用 sed 命令忽略包含\和多个空格的变量

标签 linux shell replace sed

我有两个变量,

first= new pool ser/@10.25.89.322 
second=ESX_10.2.3.4@10.52.33.21

我想用新池 ser/@10.25.89.322 替换 ESX_10.2.3.4@10.52.33.21 并且还想删除新单词前的空格。

我试过,

sed -i -e "s/${second}/"${first//\\/\\\\}"/g"

sed -i -e "s/${second}/"${first//\\[ ]*/\\\\}"/g"
sed -i -e "s/${second}/"${first//\\ */ *\\\\}"/g"

我不想删除空格,只想按原样替换(“new”之前的空格除外)。

最佳答案

试试这个:

sed -i "/${second}/ {s:${second}:${first//\\/\\\\}:g ; s/ new /new /}"

它正在删除替换后行中第一次出现的 new 中的 space

此外,在下面的测试中,添加了双引号:

$ first=" new pool ser/@10.25.89.322" 
$ second=ESX_10.2.3.4@10.52.33.21
$ sed -i "/${second}/ {s:${second}:${first//\\/\\\\}:g ; s/ new /new /}" mytestfile.txt

关于linux - 使用 sed 命令忽略包含\和多个空格的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919365/

相关文章:

python-3.x - 如何在 shell 中并行运行 python 中的依赖脚本?

R - 根据键值对替换数据框列中的所有值

windows - 卸载 Anaconda 删除了我的命令提示符

javascript - 如何对 Javascript 中的多个变量进行相同的替换

java - 使用 Java 仅在文件的第一行将计数器附加到多个相同的列字

linux - 使用 bash 和 grep -c 对密码子进行排序和计数

node.js - NodeJS : Process has been killed unexpectedly

Python 非阻塞读取命令

linux - 将子文件夹合并在一起,Linux

linux - 从 shell 与正在运行的进程通信