Escape spaces in bash script
每当我正在迭代的目录中的文件包含使用grep的字符串时,我都在尝试在bash脚本中执行一些操作。问题出在目录中的一个子集包含名称中的空格。因此,我试着用sed替换已有的逃逸空间:
1 2 3
| if grep -c"main" ${source} | sed 's/ /\\ /g'; then
# do something
fi |
但是,我仍然得到错误:
grep: /Users/me/Desktop/theDir/nameWith: No such file or directory
grep: spaces.txt: No such file or directory
我做错什么了?
- grep -c不在有空格的输出上打印任何内容。提示:这是一个数字。你可能是说grep -l。
- grep只是检查文件是否包含"main"的if条件。
您应该引用被grep'ed的文件名:
1 2 3
| if grep -c main"$source" ; then
# do something
fi |
…假设$source是文件名。如果$source是一个目录的名称,我将需要更多关于您尝试做什么的信息。
- 哦,现在我明白了OP想用sedd做什么了,我想OP实际上想把grep的输出传递给sed的输出。
- @我仍然不能100%确定OP想要做什么,但是我想我应该从这个建议开始,看看它是如何发展的。:)
- 是的,这看起来是对实际问题的正确解释。我认为这个答案可以解决OP的问题。
- 对于完全公开,$source实际上是一个文件路径,因此路径中的任何目录也可以有空格,但您的答案也适用于这种情况。我不知道用引号括住一个变量会做什么,似乎它做到了。
- 有关报价的详细信息,请参阅此链接和此链接…