免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4421 | 回复: 22
打印 上一主题 下一主题

[文本处理] sort 排序时,文本有叹号会发生命令替换,如何解决? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-16 09:48 |只看该作者 |倒序浏览
sort 排序时,文本有叹号会发生命令替换,导致排序错误,如何解决这个问题?

如文本
7940693
!944393

正确排序后应该是
!944393
7940693

sort 排序后是
7940693
!944393

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2016-05-16 09:54 |只看该作者
本帖最后由 blackold 于 2016-05-16 09:55 编辑

回复 1# zcsgamer


    什么环境?什么命令? sort 命令会发生命令替换?

论坛徽章:
0
3 [报告]
发表于 2016-05-16 10:05 |只看该作者
谢黑哥指点

环境为:Centos-6.7-x64
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

是这样,服务器有上万个文件需要按一个文件列表进行规整,为提高效率,对 find 命令查找出来的文件名和文件列表分别用 sort 排序,然后对比,执行相应操作

结果处理结果有遗漏,排查后发现是 sort 排序的问题

find 列表排序应该是:
!944393
7940693

find 列表 sort 排序:
7940693
!944393

在文件列表中有 !944393 文件名,正确排序应有 !944393 == !944393,进行处理,但 sort 排序后,因 find 列表中 7940693 在前,就有 7940693 > !944393,所以导致 !944393 文件处理错误

请黑哥费心

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2016-05-16 10:10 |只看该作者
回复 3# zcsgamer


    sort 命令是怎么写的?

论坛徽章:
0
5 [报告]
发表于 2016-05-16 10:13 |只看该作者
a=(`find / -name *.jpg | sort`)       find 列表
b=(`cat $1 | sort`)                          文件列表

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2016-05-16 10:19 |只看该作者
回复 5# zcsgamer


    用 $() 代替 ``

另外, find / -name *.jpg  应当写成
  1. find / -name '*.jpg'
复制代码

论坛徽章:
0
7 [报告]
发表于 2016-05-16 10:25 |只看该作者
谢黑哥
可是,如果在脚本中直接执行 sort,也是错误排序

#!/bin/bash
sort a > b

文件a
7940693
!944393

文件b
7940693
!944393

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2016-05-16 10:36 |只看该作者
回复 7# zcsgamer


是不是有 sort 别名?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
9 [报告]
发表于 2016-05-16 10:41 |只看该作者
要么就是 locale 设置问题,自己检查。

论坛徽章:
0
10 [报告]
发表于 2016-05-16 10:42 |只看该作者
木有啊

# alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP