SHELL编程 输出重定向

问题是这样的其中一段代码是viaaa.txtgrep-v$bbbxxx.txt|cat>xxx.txtcataaa.txt>>xxx.txt输出结果xxx.txt里的内容... 问题是这样的 其中一段代码是
vi aaa.txt
grep -v $bbb xxx.txt | cat >xxx.txt
cat aaa.txt >>xxx.txt

输出结果xxx.txt里的内容全没 只剩下aaa.txt后追加的了
经侧是grep那句出的问题

但是在同样的另一段代码里
grep -v $... xxx.txt >xxx.txt 就能很好的去除$...的部分

另:grep -v $bbb xxx.txt >xxx.bak
mv xxx.bak xxx.txt
cat aaa.txt >>xxx.txt
把原先的代码变为这样也就是说另起一个bak文件 然后覆盖原文件 就没有问题

求解原理 完美回答给200分绝不食言。
展开
 我来答
匿名用户
2012-04-07
展开全部
grep -v $bbb xxx.txt | cat >xxx.txt

在管道前后对同一个文件操作很危险。这样同时有两个程序对同一个文件读写,会产生竞争。最后的结果不好确定。最好分开处理。

rep -v $... xxx.txt >xxx.txt 这样做也不好。通过重定向后也会发生对同一个文件同时读写的情况。 但至少是同一个程序来控制(如果不算shell)。grep可能已经考虑过这样的情况,或者巧合(处理时先读,再写), 所以结果正确。但同其他程序的配合,情况就更复杂了,很可能出现问题。
具体要看grep,shell和cat代码。

但总体上,不建议这样做。这样做是极危险的行为。最好用一个备份文件,避免同时对一个文件读写操作。
百度网友05a5af4d1
2012-04-07 · 超过19用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:67.3万
展开全部
发这俩源文件上来,没你那环境不能对症下药。
我觉得你怎么这么喜欢用cat,直接输出就好啦。用awk都显得专业一点。
看下grep -v $bbb xxx.txt >xxx.txt 能不能用,感觉是语法的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghf851208
2012-04-06 · 超过11用户采纳过TA的回答
知道答主
回答量:42
采纳率:100%
帮助的人:32.8万
展开全部
grep -v $bbb xxx.txt | cat >xxx.txt
你试下单独跑 cat > xxx.txt
我觉的,这里cat >xxx.txt 可能没有作为重定向出现,而变成了单独生成xxx.txt的情况了
追问
但是在同样的另一段代码里
grep -v $... xxx.txt >xxx.txt 就能很好的去除$...的部分

这又如何解释?
我总觉得和前面调用vi有关系。
追答
g rep -v $... xxx.txt  > xxx.txt  这句话的意思是将xxx.txt去掉$...后的内容重定向xxx.txt
vi aaa.txt 是在程序里的?
shell 程序里添加vi 命令是会进入编辑模式的。有可能和你的vi aaa.txt 有关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
常乐常知足
2012-04-06 · TA获得超过1152个赞
知道小有建树答主
回答量:702
采纳率:66%
帮助的人:191万
展开全部
可能和bbb的内容有关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
终极巴帝龙
2012-04-07
知道答主
回答量:36
采纳率:0%
帮助的人:11.4万
展开全部
不知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式