Chinaunix

标题: 如何截取文件名并重组写入文件 [打印本页]

作者: alex0516    时间: 2011-05-16 13:47
标题: 如何截取文件名并重组写入文件
大家好,最近遇到一个问题:

        如何把一组文件名:dtst3424.pst;dsat2345.pst;erty1543.pst。。。。前4个字符截取下来(dtst,dsat,erty....),然后在他们前面加上“G",


最后把他们全部写到一个文件中。

        上述如何在shell命令行中做到???


谢谢解答
作者: where27    时间: 2011-05-16 13:56
如何获取这组文件名呢?这些文件是不是指定目录下的所有文件?
作者: liion631818    时间: 2011-05-16 13:57
回复 1# alex0516


    首先问下怎样获取到那一组文件名的?

    单个字符串处理:
  1. echo G${filename:0:4} >file
复制代码

作者: dzhxc    时间: 2011-05-16 13:57
echo "dtst3424.pst;dsat2345.pst;erty1543.pst"|awk  'BEGIN{FS=".";RS=";"}{print $1}'|sed 's/\([^0-9]*\).*/G\1/' >test.txt
作者: dzhxc    时间: 2011-05-16 13:59
回复 3# liion631818


    厉害!
作者: jason680    时间: 2011-05-16 13:59
大家好,最近遇到一个问题:

        如何把一组文件名:dtst3424.pst;dsat2345.pst;erty1543.pst。。。 ...
alex0516 发表于 2011-05-16 13:47



$ echo 'dtst3424.pst;dsat2345.pst;erty1543.pst' | awk -F';' '{for(n=1;n<=NF;n++){print "G"substr($n,1,4)}}'
Gdtst
Gdsat
Gerty
作者: yinyuemi    时间: 2011-05-16 13:59
回复 1# alex0516


    这?
  1. echo 'dtst3424.pst;dsat2345.pst;erty1543.pst' |sed -r 's/(;*)(....)[^\.]*.pst/G\2,/g'
  2. Gdtst,Gdsat,Gerty,
复制代码

作者: justlooks    时间: 2011-05-16 14:11

  1. $ echo "dtst3424.pst;dsat2345.pst;erty1543.pst"|perl -ne 's/\G([^;]{4})[^;]+(?:;|$)/G\1;/g;print $_,"\n"'

  2. Gdtst;Gdsat;Gerty;
复制代码

作者: alex0516    时间: 2011-05-16 15:49
回复 2# where27


    可以这样认为,就是所有文件
作者: alex0516    时间: 2011-05-16 15:50
回复 3# liion631818


    这个filename是指?
作者: alex0516    时间: 2011-05-16 16:02
回复 6# jason680


    我运行了一下,有问题啊。


    有没有更加简单的用法?


     谢谢
作者: where27    时间: 2011-05-16 16:17
回复 11# alex0516
  1. find . -type f|while read file
  2. do
  3.      echo "G${file:2:4}" >>newfile
  4. done
复制代码

作者: liion631818    时间: 2011-05-16 16:29
本帖最后由 liion631818 于 2011-05-16 16:30 编辑

回复 10# alex0516


    就是单个文件名,例如dtst3424.pst
   首先你得告诉怎样获取要修改的文件名列表,是在一个目录下,还是一个文件中列出了所有要修改的文件名

  如果是在当前目录下的所有文件改名的话,楼上的代码可以用
作者: alex0516    时间: 2011-05-16 16:33
回复 13# liion631818


    谢谢。。

    我需要在命令行来完成这个操作:ls *.pst |*****一系列操作,以达到截取所有.pst文件前4个字符,然后在所有这些字符前统一加上“G"。

    不知道我描述是否清楚
作者: liion631818    时间: 2011-05-16 16:40
本帖最后由 liion631818 于 2011-05-16 16:41 编辑

回复 14# alex0516
  1. for i in `ls *.pst`; do echo "G${i:0:4}";done
复制代码
12楼 老表的代码也行啊,在find 后面加 -nam "*.pst"
作者: zooyo    时间: 2011-05-16 16:58
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2