1
我一直在使用Google搜索一段时间,但无法找到答案。我有以下bash函数,它在Python项目目录中为'NAME'
执行grep
。它拾取包含'NAME'
的正确文件。然后我运行sed
命令以用用户输入字符串替代'NAME'
。python脚本的sed替换 - “命令未找到”问题
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
现在,匹配其中2个文件grep 'NAME'
样子:
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!"
当我使用调试模式下运行该脚本,输出:
++ 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's/NAME /'$ 1'/ g'“$ file”'''但仍然是同样的问题。我也尝试过'$(sed's/NAME /'$ 1'/ g''$ file“)',但结果相同。还有其他建议吗? – njk2015
我的不好。我删除了'\'... \''滴答声,它工作。你能解释一下为什么这有效吗?什么是间接的?为了在bash脚本中执行一个命令,我认为你必须使用'\'... \''ticks或$(...)'? – njk2015
@ njk2015反引号或'$(...)'语法用于当您想要将命令的输出捕获为字符串时,例如,您可以将它保存在Bash变量中。顺便说一句,'$(...)'比反引号要好:反引号使得代码不易读,并且不支持命令的嵌套。 –