免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4940 | 回复: 5

[已解决]把文本逐行保存到bash数组的简单办法. [复制链接]

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
发表于 2011-04-28 19:40 |显示全部楼层
本帖最后由 惟吾无为 于 2011-04-29 12:33 编辑

终于找到具体原因了, 在改变IFS时, 由于个人失误, 得到的IFS居然是空的, 不是MSYS的错...

----------

对文件列表进行处理.
find找的, 所以有个'.' , 想去掉这行, 并把剩下的内容按行保存到数组中.

待处理文件名为fl. 行中有空格.
# cat fl
link
.
dir
file
char dev
block dev
pipe
socket

自以为是地
IFS=$'\n'
filename=($(sed "/^\.$/d" fl))
结果后来才发现
${#filename[@]}=1
我想一个元素保存一行, 而非一个元素全文保存呐...

期待
filename[1]=link
filename[2]=dir
filename[3]=file
...
就是为'.'的行忽略掉, 其他的按顺序依次保存在数组中.
filename[0]另作他用.

概要:
1, 需要把为'.'的行去掉, 或者不让find显示'.'.
2, 把改变后的内容逐行保存到数组各元素中中.

要求方案尽可能简单.
最好别循环...
不知awk能否搞定.

论坛徽章:
0
发表于 2011-04-28 21:59 |显示全部楼层
  1. xiabao@6P9SN2X ~/test
  2. $ cat urfile
  3. .
  4. link
  5. dir
  6. file
  7. chardev
  8. blockdev
  9. pipe
  10. socket

  11. xiabao@6P9SN2X ~/test
  12. $ filename=(`cat urfile | tr '\n' ' '`)  

  13. xiabao@6P9SN2X ~/test
  14. $ echo ${#filename[@]} ${filename[1]} ${filename[2]} ${filename[3]}  
  15. 8 link dir file
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
发表于 2011-04-28 23:49 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2011-04-29 02:52 |显示全部楼层
回复 1# 惟吾无为


    another way:
  1. eval `awk '!/^\.$/{print "filename["++i"]="$0}' file`
复制代码

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
发表于 2011-04-29 11:54 |显示全部楼层
xiaopan3322 发表于 2011-04-28 21:59

原因找到了, 可能是MSYS的sed或bash有些问题, 现在已经达到预期效果. 看来不能都以MSYS的结果为准了...

论坛徽章:
1
巳蛇
日期:2013-10-28 15:55:33
发表于 2011-04-29 11:57 |显示全部楼层
感谢楼上各位相助, 是我失策, 还望见谅.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP