中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]多重命令的最后重定向输出怎么办呢?
作者:
标题: [已解决]多重命令的最后重定向输出怎么办呢? 上一主题 | 下一主题
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『楼 主』:  [已解决]多重命令的最后重定向输出怎么办呢?

比如这样一串命令:
find /n ".*" abc.txt|sed 's/aa/bb'|gawk '{print aa++ "\t" $0}'
这样一串命令,如果把重定向输出 >>abcd.txt 加到行首,则它会和到第一个abc.txt的后面去,成了第一条命令的输出。 而放到整行的末尾又会出问题,会被当成最后一条命令的输入文件产生错误。

请问这种情况该怎么办呢?
ps: 命令是临时乱写的,仅做参考,实际用的复杂得多

[ Last edited by pooronce on 2008-9-8 at 10:52 AM ]

2008-8-29 14:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 2 楼』:  

试试:
(find /n ".*" abc.txt|sed 's/aa/bb'|gawk '{print aa++ "\t" $0}')>>abcd.txt


2008-8-29 14:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 3 楼』:  

不行

另外实际上find之前还有for语句 -_-#

2008-8-29 14:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

能否把abc.txt的内容和你在顶楼“临时乱写的”命令的输出结果贴出来看看,我认为有语法错误。



2008-8-29 16:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

语法有错吧,CMD 里面用 gawk 需要用双引号。

何况你这些命令的组合无非是处理字符串,用 gawk 就足够了。

2008-8-30 11:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by lxmxn at 2008-8-30 11:14 AM:
语法有错吧,CMD 里面用 gawk 需要用双引号。

何况你这些命令的组合无非是处理字符串,用 gawk 就足够了。

我一直是用单引号的,这样方便一点(因为里面会有指定分割符啊,比较字符串啊等等的都是用双引号,到时候注释起来麻烦且在cmd下经常出错)


已经发现问题所在了,原来是双引号数目不匹配造成的,但又没办法匹配,因为最后需要指定一下双引号作为替换来源(在sed中)

这种情况怎么办呢?如果双引号个数不匹配的情况下,用脱字符?

2008-9-4 14:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  

cmd里面用单引号不报错?你的gawk版本是?



2008-9-4 15:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 8 楼』:  

GNU Awk 3.1.6

cygwin里的

2008-9-4 18:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 9 楼』:  RE: pooronce

你能使用单引号,是因为你使用的是Cygwin,里面的环境应该是shell,而不是cmd,shell 中既可以用单引号引用一个“单元”,也可以用双引号,而cmd里面只能是双引号,你用单引号一般会报错的。

一般解决办法有三种:
1、使用转义;
2、使用字符的十六进制或者八进制来表示;
3、添加“额外”的引号来构造“配对”的双引号

D:\lxmxn\work\Other\tests>type test.txt
welcome to "DOS union"

D:\lxmxn\work\Other\tests>sed "s/\"/#/g" "test.txt
welcome to #DOS union#

D:\lxmxn\work\Other\tests>sed "s/\x22/#/g" test.txt
welcome to #DOS union#

D:\lxmxn\work\Other\tests>sed --version
GNU sed version 4.0.7
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

D:\lxmxn\work\Other\tests>


[ Last edited by lxmxn on 2008-9-5 at 02:49 AM ]

   此帖被 +4 点积分        点击查看详情   
评分人:【 pooronce 分数: +4  时间:2008-9-8 10:50


2008-9-4 19:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  

原来是cygwin啊,楼主在顶楼给的例子忒误导观众了,cygwin里面哪有这样的用法啊:find /n ".*" abc.txt



2008-9-4 20:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 11 楼』:  

装cygwin后我从来就没用过它进bash环境的 -_-#
只是在path里加入cygwin\bin目录
然后所有的使用都是在cmd环境下面用的啊

2008-9-5 00:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 12 楼』:  

刚试了一下,把cygwin的bin目录复制到虚拟机里,然后加Path,再直接使用sed/gawk/grep 都是可以用单引号的

你们是怎么安装这些命令的啊?什么版本的?

2008-9-5 11:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: