【问题标题】:passing sed argument with slash ( making a directory a string ?) [duplicate]用斜杠传递 sed 参数(使目录成为字符串?)[重复]
【发布时间】:2017-10-16 08:48:18
【问题描述】:

我正在尝试传入 assets/css/images 来替换多个文件中的图像。

所以我写了这个脚本

$list
$word
$neword
$i

echo "select files: "
read list
echo "input word to search for: "
read word
echo "input word to replace with: "
read neword

for i in $list
do
sed -i "s/${word}/${neword}/g" $i

完成

它适用于没有 / 的单词,我知道为什么,但我不知道如何绕过它。有人吗?

【问题讨论】:

  • 我的意思是用字符串“assets/css/images”替换字符串“images”
  • 我得到的错误是:sed -e expression #1, char 17: unknown option to 's'
  • 脚本开头的变量插值列表真的是代码的一部分吗?如果未设置变量,它将没有任何用处,如果不设置,则可能会发生一些不好的事情。
  • grundic,感谢您指出这一点。我这辈子都找不到。谢谢!

标签: bash sed replace slash


【解决方案1】:

您应该这样做以在 sed 中转义 /

尝试关注,

sed -i "s#${word}#${neword}#g" "$i"

sed -i "s~${word}~${neword}~g" "$i"

编辑:按照@tripleee 的建议在文件名中添加引号,以避免$i 中包含的文件名有空格等条件。

【讨论】:

  • 您还应该在"$i"周围添加双引号。
  • 完美。太感谢了!我是 bash 的新手。这帮助很大,非常感谢。我用的是带〜的那个,它起作用了!
  • 它仍然适合您。但请在问另一个问题之前用谷歌搜索你的问题。干杯。 :)
猜你喜欢
  • 2014-09-17
  • 1970-01-01
  • 2023-03-20
  • 2022-07-21
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2015-10-04
相关资源
最近更新 更多