Bash - 替换文本

use*_*811 2 bash sed

我正在尝试替换属性文件中的一行文本.例如:

food.type=banana
Run Code Online (Sandbox Code Playgroud)

使用这行代码,我可以完全用另一个输入的输入替换banana.

FOOD=apple
sed "s/food.type=.*/food.type=$FOOD/" 
Run Code Online (Sandbox Code Playgroud)

输出:

food.type=apple
Run Code Online (Sandbox Code Playgroud)

然而,当我试图替换的前一行文本中有一个/,我无法让替换工作.例如:

food.type=/yellow/banana
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.谢谢!

she*_*ter 5

斜线被视为关闭reg-ex匹配/替换模式,

sed "s@food.type=.*@food.type=$FOOD@" 
Run Code Online (Sandbox Code Playgroud)

有些seds要求你转义非标准分隔符的第一个实例,即

sed "s\@food.type=.*@food.type=$FOOD@" 
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.

  • 这里的一个兴趣点是你可以用这种方式使用*any*字符作为正则表达式分隔符.其他常见的选择包括`|`,`\`和`:`取决于要处理的文本. (2认同)