楼 主
[已解决]多重命令的最后重定向输出怎么办呢?
发表于 2008-08-29 14:06 · 中国 上海 浦东新区 电信
中级用户
★★
积分 484 发帖 250 注册 2007-06-05 23:33 19年会员 UID 90372 性别 男
状态 离线
比如这样一串命令:
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 ]
第 2 楼
发表于 2008-08-29 14:11 · 中国 北京 海淀区 联通
银牌会员
★★★
积分 2,098 发帖 566 注册 2007-09-11 07:27 18年会员 UID 97070 性别 男
状态 离线
试试:
(find /n ".*" abc.txt|sed 's/aa/bb'|gawk '{print aa++ "\t" $0}')>>abcd.txt
第 3 楼
发表于 2008-08-29 14:25 · 中国 上海 浦东新区 电信
中级用户
★★
积分 484 发帖 250 注册 2007-06-05 23:33 19年会员 UID 90372 性别 男
状态 离线
不行
另外实际上find之前还有for语句 -_-#
第 4 楼
发表于 2008-08-29 16:19 · 美国 惠普HP
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
能否把abc.txt的内容和你在顶楼“临时乱写的”命令的输出结果贴出来看看,我认为有语法错误。
第 5 楼
发表于 2008-08-30 11:14 · 中国 湖北 武汉 联通
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 20年会员 UID 59080
状态 离线
语法有错吧,CMD 里面用 gawk 需要用双引号。
何况你这些命令的组合无非是处理字符串,用 gawk 就足够了。
第 6 楼
发表于 2008-09-04 14:34 · 中国 上海 浦东新区 电信
中级用户
★★
积分 484 发帖 250 注册 2007-06-05 23:33 19年会员 UID 90372 性别 男
状态 离线
Originally posted by lxmxn at 2008-8-30 11:14 AM:
语法有错吧,CMD 里面用 gawk 需要用双引号。
何况你这些命令的组合无非是处理字符串,用 gawk 就足够了。
我一直是用单引号的,这样方便一点(因为里面会有指定分割符啊,比较字符串啊等等的都是用双引号,到时候注释起来麻烦且在cmd下经常出错)
已经发现问题所在了,原来是双引号数目不匹配造成的,但又没办法匹配,因为最后需要指定一下双引号作为替换来源(在sed中)
这种情况怎么办呢?如果双引号个数不匹配的情况下,用脱字符?
第 7 楼
发表于 2008-09-04 15:19 · 新加坡
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
第 8 楼
发表于 2008-09-04 18:15 · 中国 上海 浦东新区 电信
中级用户
★★
积分 484 发帖 250 注册 2007-06-05 23:33 19年会员 UID 90372 性别 男
状态 离线
第 9 楼
RE: pooronce
发表于 2008-09-04 19:22 · 中国 湖北 武汉 联通
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 20年会员 UID 59080
状态 离线
你能使用单引号,是因为你使用的是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 ]
第 10 楼
发表于 2008-09-04 20:54 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
原来是cygwin啊,楼主在顶楼给的例子忒误导观众了,cygwin里面哪有这样的用法啊:find /n ".*" abc.txt
第 11 楼
发表于 2008-09-05 00:09 · 中国 上海 电信
中级用户
★★
积分 484 发帖 250 注册 2007-06-05 23:33 19年会员 UID 90372 性别 男
状态 离线
装cygwin后我从来就没用过它进bash环境的 -_-#
只是在path里加入cygwin\bin目录
然后所有的使用都是在cmd环境下面用的啊
第 12 楼
发表于 2008-09-05 11:25 · 中国 上海 浦东新区 电信
中级用户
★★
积分 484 发帖 250 注册 2007-06-05 23:33 19年会员 UID 90372 性别 男
状态 离线
刚试了一下,把cygwin的bin目录复制到虚拟机里,然后加Path,再直接使用sed/gawk/grep 都是可以用单引号的
你们是怎么安装这些命令的啊?什么版本的?
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正