python - python 脚本上的 sed 替换 - "command not found"问题

标签 python bash sed

我已经在谷歌上搜索了一段时间,但找不到答案。我有以下 bash 函数,它执行 grep对于 'NAME'在 python 项目目录中。它会选择包含 'NAME' 的正确文件.然后我运行 sed命令替换'NAME'带有用户输入字符串。

replace_NAME_in_files() {
    read -ra MATCHED_FILES <<< `grep 'NAME' $NEW_PROJECT -lR`
    for file in "${MATCHED_FILES[@]}"; do
        `sed "s/NAME/$1/g" $file`
    done
}

我得到的错误如下:
/Users/me/scripts/new_python_project.sh: line 37: try:: command not found
from: can't read /var/mail/nose.tools

现在,与 grep 'NAME' 匹配的 2 个文件看起来像:
Dev-MacBook-Pro:projects dev$ cat ex47/setup.py 
try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

config = {
        'description': 'My Project',
        'author': 'Dev',
        'url': 'URL to get it at.',
        'download_url': 'Where to download it.',
        'author_email': 'My email.',
        'version': '0.1',
        'install_requires': ['nose'],
        'packages': ['NAME'],
        'scripts': [],
        'name': 'projectname'
}

setup(**config)

和另一个输入文件到sed是:
Dev-MacBook-Pro:projects dev$ cat ex47/tests/ex47_tests.py 
from nose.tools import *
import NAME

def setup():
    print "SETUP!"

def teardown():
    print "TEAR DOWN!"

def test_basic():
    print "I RAN!"

当我使用 Debug模式运行脚本时,输出为:
++ grep NAME /Users/dev/python/workspace/projects/ex47 -lR
+ for file in '"${MATCHED_FILES[@]}"'
++ sed s/NAME/ex47/g /Users/dev/python/workspace/projects/ex47/setup.py
+ try: from setuptools import setup except ImportError: from distutils.core import setup config = '{' ''\''description'\'':' ''\''My' 'Project'\'',' ''\''author'\'':' ''\''dev'\'',' ''\''url'\'':' ''\''URL' to get it 'at.'\'',' ''\''download_url'\'':' ''\''Where' to download 'it.'\'',' ''\''author_email'\'':' ''\''My' 'email.'\'',' ''\''version'\'':' ''\''0.1'\'',' ''\''install_requires'\'':' '['\''nose'\''],' ''\''packages'\'':' '['\''ex47'\''],' ''\''scripts'\'':' '[],' ''\''name'\'':' ''\''projectname'\''' '}' 'setup(**config)'
/Users/dev/scripts/new_python_project.sh: line 37: try:: command not found
+ for file in '"${MATCHED_FILES[@]}"'
++ sed s/NAME/ex47/g /Users/dev/python/workspace/projects/ex47/tests/ex47_tests.py
+ from nose.tools import ex47 skeleton skeleton_bck import ex47 def 'setup():' print '"SETUP!"' def 'teardown():' print '"TEAR' 'DOWN!"' def 'test_basic():' print '"I' 'RAN!"'
from: can't read /var/mail/nose.tools

sed 似乎进行了替换,但随后它出现在它试图执行输入文件时?知道发生了什么吗?

最佳答案

尝试去掉后面的勾号并使用 sed 's/NAME/$1/g' "$file"

后记号看到间接,因此它试图在 sed 命令之后执行 $file,而不是与 sed 一起使用它。

关于python - python 脚本上的 sed 替换 - "command not found"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306485/

相关文章:

python - 如何使用 Python Tkinter 使按钮打开特定的 .csv 文件?

python - 如何在脚本中使用谷歌应用程序专用密码?

python - getent 主机采用前 3 位数字+主机名 unix

python - 获取 IndexError : string index out of range in python

python - 使用函数和 for 循环将文本与多个文件的列表进行比较

linux - 检查文件的所有行是否包含在另一个文件中

python - 有没有办法使 psutil 输出在运行之间保持一致?

regex - 如何使用 sed 进行多种模式替换

python - 为什么这不会打印不需要销售税的商品的小额成本?

bash - 如何仅检查自上次 checkin bash以来添加的行