【问题标题】:replace recursively shabang with sed用 sed 递归替换 shabang
【发布时间】:2017-01-17 09:01:10
【问题描述】:

我正在尝试使用 sed 递归替换文件夹中的所有 shabang(用于在 android 中运行程序..)。 当我尝试使用“普通单词”时,该命令运行良好,但当我尝试使用 shabang 时变得头疼。我尝试的一切,我都得到了错误:

  • 替换表达式中的错误选项

  • 不匹配的'/'

  • 找不到事件

我是新手,这可能是初学者的错误,所以这里是代码(tsst 是我的文件夹):

grep -rl "env python" tsst |xargs sed -i "s/\#!/usr/bin/env python/\#!/system/python2.7.9//g"

我也尝试了变量:(代码的第一部分很好..我只是复制有问题的地方。)

sed -i "s/$old/$new/g"

sed -i 's/"$old"/"$new"/g'

sed -i "s/'\#!\/usr\/bin\/env python'/'\#!\/system\/python2.7.9\/'/g"

我做错了什么?

【问题讨论】:

  • 您是否尝试过 1) 使用 find 而不是 xargs,2) 在单个文件上进行此替换,3) 更简单的替换?

标签: bash shell sed


【解决方案1】:

试试这个正则表达式。您不能将 / 作为正则表达式分隔符和您想要匹配的实际字符混合使用。您可以使用任何字符作为正则表达式分隔符,例如 |,只要您在所有 3 个位置都使用它而不是 /

$ echo '#!/usr/bin/env python'  | sed 's|#!/usr/bin/env python|#!/system/python2.7.9|g'
#!/system/python2.7.9

【讨论】:

  • 谢谢!!它工作正常..我知道这是愚蠢的错误..但我没有想到这一点,现在我知道并理解它为什么不起作用..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2012-12-30
  • 2010-12-07
  • 1970-01-01
相关资源
最近更新 更多