免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: aingwen
打印 上一主题 下一主题

[文本处理] 求用一行命令得出如下结果 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-11-20 12:56 |只看该作者
echo {1..8}{a..c}|sed -r 's/(.)(.)( |$)/\2\1,/g;s/,$//'

论坛徽章:
18
处女座
日期:2014-11-13 15:52:322015亚冠之胡齐斯坦钢铁
日期:2015-08-14 16:09:082015亚冠之北京国安
日期:2015-06-02 18:41:152015亚冠之广州恒大
日期:2015-06-02 18:41:15NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯之中国
日期:2015-04-01 16:38:392015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之阿联酋
日期:2015-03-06 09:33:432015年辞旧岁徽章
日期:2015-03-04 13:32:472015年迎新春徽章
日期:2015-03-04 10:01:44拜羊年徽章
日期:2015-03-03 16:15:43洛杉矶快船
日期:2015-03-02 16:05:34
12 [报告]
发表于 2014-11-20 12:56 |只看该作者
10楼代码不错啊,实现楼主的效果了,学习了。。这个对于我这样的新手来说好理解些。。

论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
13 [报告]
发表于 2014-11-20 13:20 |只看该作者
我也觉得10楼代码不错,对于俺这样的菜鸟,我看懂了。

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
14 [报告]
发表于 2014-11-20 13:31 |只看该作者
回复 1# aingwen


参考楼上的写的.
  1. echo {1..8}{a..c}|sed -r 's/([1-8])([a-c])/\2\1/g;s/\s/,/g'
  2. a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4,a5,b5,c5,a6,b6,c6,a7,b7,c7,a8,b8,c8
复制代码

论坛徽章:
0
15 [报告]
发表于 2014-11-20 13:45 |只看该作者
都看懂了?请看这个:
eval echo {`echo a,b,c`}{1..8}|tr " " ","

论坛徽章:
0
16 [报告]
发表于 2014-11-20 16:55 |只看该作者
回复 15# Looiml
大神能不能用这个例子讲解一下这个eval用法,网上看了一些资料都说它会扫描两遍,这个例子中扫描第一遍后是什么样?

   

论坛徽章:
0
17 [报告]
发表于 2014-11-20 20:02 |只看该作者
本帖最后由 Looiml 于 2014-11-20 20:08 编辑

回复 16# aingwen
“大神”这称号实在是不敢当啊,今天心情不错,让在下来解释一下^V^

Follow these steps:

1. 在这条命令中,管道符的优先级最高,所以该命令被拆成通过管道连接的两条命令:
eval echo {`echo a,b,c`}{1..8}
tr " " ","       #因这条命令简单得离谱,后面不作解释

2. 现在来解析第一条命令:
eval echo {`echo a,b,c`}{1..8}

eval后的所有内容均识别为它的参数,所以首先要完成这些参数的解析,大括号扩展({1..8})的优先级要高于命令扩展(`echo a,b,c`),所以命令解析为:
eval echo {`echo a,b,c`}1 {`echo a,b,c`}2 {`echo a,b,c`}3 {`echo a,b,c`}4 {`echo a,b,c`}5 {`echo a,b,c`}6 {`echo a,b,c`}7 {`echo a,b,c`}8

3. 解释器发现参数里还有命令扩展,遂扩展之:
eval echo {a,b,c}1 {a,b,c}2 {a,b,c}3 {a,b,c}4 {a,b,c}5 {a,b,c}6 {a,b,c}7 {a,b,c}8

4. eval的参数解析完成,于是开始在子shell里执行参数:
echo {a,b,c}1 {a,b,c}2 {a,b,c}3 {a,b,c}4 {a,b,c}5 {a,b,c}6 {a,b,c}7 {a,b,c}8
解释器解析echo命令的参数,识别到大括号扩展,于是解析成:
echo a1 b1 c1 a2 b2 c2 a3 b3 c3 a4 b4 c4 a5 b5 c5 a6 b6 c6 a7 b7 c7 a8 b8 c8

5. 后面的大家都知道了。

知道为什么echo {a..b}{1..8}为什么会得到那样的结果吗,因为{a..b}和{1..8}的优先级一样,会从左至右依次扩展,上面的句法可以用来修改连续大括号扩展的内外for循环优先顺序。
   

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
18 [报告]
发表于 2014-11-24 15:38 |只看该作者
回复 17# Looiml


    有这个优先级介绍文档么?

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
19 [报告]
发表于 2014-11-24 15:43 |只看该作者
回复 17# Looiml


    好吧, 在bash手册里看到了, 这是一个细节啊, 赞一个

论坛徽章:
0
20 [报告]
发表于 2014-11-25 18:16 |只看该作者
  1. echo 'a b c' | awk '{for(j=1;j<=8;j++)for(i=1;i<=NF;i++)x=x?x","$i j:$i j;print x}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP