刚开始正式学习写脚本,就遇到了这样的蹊跷的问题。
一个文本example.txt,内容为:
一个sed脚本replace.sed:
看下文档:
然后执行sed -f replace.sed example.txt,产生新文档exam01.txt;
高手或许知道哪里出错了,但我菜鸟想不出来,为什么呢?我明明是输出到exam01.txt,为什么呢,明明产生了exam01.txt,却cat不了?
不过在用tab补全的时候,也发现这个问题,exam01.txt后补上了\和空格:
于是在命令行下执行:sed -n 's/is/IS/gw exam01.txt' example.txt,成功执行:
可是2个同名文件,晕倒!
rm exam01.txt,一个成功删除,一个报错:
忽然想起生产中遇到过删除文件名带空格事情,于是执行rm "exam01.txt_",(这里的_是空格的意思 ),成功删除 :
(ps:直接tab补全,也可以删除的,补全了\和空格,直接回车ok,当然这是后来发现的)
到这里,意识到原因,肯定是空格捣的鬼,回查sed脚本:
发现脚本最后一行文件名和$之间确实有个空格。把exam01.txt后的空格删除,再执行,得到了自己想要的文件,cat exam01.txt,成功了!
再来看一个简单的shell脚本,re.sh:
这里重定向的文件名exam02.txt,exam03.txt后都有空格。
执行sh re.sh,产生exam02.txt,exam03.txt:
cat exam02.txt;成功查看:
cat exam03.txt,若不用tab补全的话,还是报错:
从这个shell脚本re.sh可以得出结论,sed的选项w重定向输出的文件名后不可以有空格(有空格也可以,只是会遇到麻烦)。
另:关于删除带空格的文档。后缀空格已经见识了,再来看看前缀空格文档:
1.编写代码要养成良好的习惯,严格执行命令格式要求。
2.调试脚本,区分不同命令工具的差异。
转载于:https://blog.51cto.com/systone/657123