免费注册 查看新帖 |

Chinaunix

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

[文本处理] 关于判断语句的两个问题,求高手指教!!!谢谢!!关于if语句里判断包含字符串问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-17 17:43 |只看该作者 |倒序浏览
本帖最后由 lbbei 于 2014-08-17 17:49 编辑

有若干文件,
20071231_2200z.ttt   
20071231_2200z_#02.ttt
20071231_2200n_#03.ttt
20071232_2200e.ttt  
20071232_2200e_#02.ttt   等,
文件名改成
20071231_2200.00.1.ttt   
20071231_2200.02.1.ttt
20071231_2200.03.2.ttt
20071232_2200.00.3.ttt  
20071232_2200.02.3..ttt
1、即若文件名含有 “_#”,则新文件名 $1.$2.$3  的$2等于原文件名 #后面的两位字符  
        若文件名未含有 “_#”,则新文件名 $1.$2.$3  的$2等于 00
2、将文件名中的 z=1   n=2   e=3替换


不管怎么调结果都不对,1里面只输出ELSE,是哪里错了?还是说根本就不对?求正确结果,谢谢

for  XX in *ttt
do
      if [[ $XX = *_*_* ]]   then        if [[ $XX =~ "_#" ]]    还有好几种都不对
     SE1=00
     else
     SE1=${XX:16:2}
     fi
     if [ ${XX:13:1} = z ]   then  
     CH1=1
     else if [ ${XX:13:1} = n ]  then
     CH1=2
     else CH1=3
     fi   
     fi
done

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
2 [报告]
发表于 2014-08-17 19:11 |只看该作者
  1. $ ls *.ttt
  2. 20071231_2200n_#03.ttt  20071231_2200z.ttt      20071232_2200e.ttt
  3. 20071231_2200z_#02.ttt  20071232_2200e_#02.ttt
  4. $ for xx in *.ttt
  5. do
  6.     newname=`basename $xx | sed -r 's/[a-z]\./_00_&/;s/([a-z])_#([0-9]+)/_\2_\1/;y/zne/123/'`
  7.     echo $newname
  8. done
  9. 20071231_2200_03_2.ttt
  10. 20071231_2200_02_1.ttt
  11. 20071231_2200_00_1.ttt
  12. 20071232_2200_02_3.ttt
  13. 20071232_2200_00_3.ttt
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-08-17 19:31 |只看该作者
本帖最后由 lbbei 于 2014-08-17 19:53 编辑

{:3_184:} 好吧,根本看不懂。结果是对的,谢了回复 2# klainogn


   如果要把改动的部分赋值给变量该怎么做? 还有   basename $xx   是干嘛用的?

我最后想要的结果是这样的, ??字段是另外的变量赋值
????.07.???.22.00.03.2.ttt
????.07.???.22.00.02.1.ttt
????.07.???.22.00.00.1.ttt
????.07.???.22.00.02.3.ttt
????.07.???.22.00.00.3.ttt

论坛徽章:
9
寅虎
日期:2013-12-02 12:49:22巨蟹座
日期:2014-07-18 18:13:34卯兔
日期:2014-07-25 14:43:08子鼠
日期:2014-07-26 10:10:51酉鸡
日期:2014-07-31 15:09:562015亚冠之本尤德科
日期:2015-05-19 09:27:382015亚冠之卡尔希纳萨夫
日期:2015-06-20 10:30:212015亚冠之阿尔纳斯尔
日期:2015-07-01 20:46:062015亚冠之城南
日期:2015-07-15 21:12:00
4 [报告]
发表于 2014-08-17 19:31 |只看该作者
  1. #!/bin/bash

  2. for i in *ttt
  3. do
  4.         j=$(echo "$i" | sed -r 's/_#/./;ta;s/ttt/00.ttt/;:a;s/([^[a-z]]*)([a-z])(.*\.)(.*)/\1\3\2.\4/;y/zne/123/')
  5.         mv $i $j
  6. done
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-08-17 19:40 |只看该作者
谢谢了。回复 4# lifayi2008


   

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
6 [报告]
发表于 2014-08-18 01:02 |只看该作者
回复 1# lbbei
awk -F '[_.]' '{if($(NF-1)~"#") {gsub(/#/,"",$(NF-1));gsub(/[a-z]$/,"",$(NF-2)) ; print $1"_"$2"." $3"."++a "." $NF}
else{ gsub(/[a-z]$/,"",$(NF-1)); print $1"_"$2".00."++b"."  $NF}}'


   

论坛徽章:
0
7 [报告]
发表于 2014-08-18 10:20 |只看该作者
回复 6# zxy877298415


    谢谢,问题已解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP