免费注册 查看新帖 |

Chinaunix

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

听说shell版的气氛好,有一小问题寻求帮助。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-26 19:49 |只看该作者 |倒序浏览
一系列的*.txt小文件,将这个文件里的所有标示".doc",改为".docbak"的shell语句如何写?


shell 新人,请指教。,

论坛徽章:
0
2 [报告]
发表于 2007-02-26 20:03 |只看该作者
find . -type f -name "*.txt" | xargs -i sed -i 's/.*\.\<doc\>/&.bak/' {}

论坛徽章:
0
3 [报告]
发表于 2007-02-26 20:04 |只看该作者
while read file
do
mv $file ${file}bak
done <a.txt

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-02-26 23:08 |只看该作者
rename .doc .docbook *.doc

论坛徽章:
0
5 [报告]
发表于 2007-02-27 00:50 |只看该作者
非常感谢楼上三位热心朋友。

4Aiur 的语句能看明白。
Ray001 的不太明白。
網中人的理解跟我想做的可能有出入:
我想表述的是:
/tmp/目录下有a.txt,b.txt,c.txt等三至四个DOS格式文本文件,这些文件里有".doc"这四个字符,将这四个符找出来,并替换成".docbak"这7个字符.


另如何将每个DOS格式的文本文件的第三行删除呢?

论坛徽章:
0
6 [报告]
发表于 2007-02-27 09:03 |只看该作者
1、字符替换
perl -p -i -e "s/\.doc/\.docbak/g" *txt

2、删除第三行
for  i in `ls *txt`
do
         sed '3d' $i>$i.new
         mv $i $i.old
         mv $i.new $i
done

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2007-02-27 09:03 |只看该作者
哦,sorry,老眼昏花,一時失察,真是不好意思呢。
修改一下:
for i in /tmp/*.txt
do
    sed -i 's/\.doc/\.docbook/g' $i
done


至於你後面的要求,可試試看:
for i in /tmp/*.txt
do
    file $i | grep -q 'with CRLF line terminators' && sed -i '3d' $i
done

论坛徽章:
0
8 [报告]
发表于 2007-03-09 00:20 |只看该作者
原帖由 網中人 于 2007-2-27 09:03 发表
哦,sorry,老眼昏花,一時失察,真是不好意思呢。
修改一下:
for i in /tmp/*.txt
do
    sed -i 's/\.doc/\.docbook/g' $i
done


至於你後面的要求,可試試看:
for i in /tmp/*.txt
do
    file  ...



这种方法出错:
sed: 1: "1423.txt": command c expects \ followed by text

# cat mybat.sh
#!/bin/sh
for i in *.txt
do
  file $i | grep -q 'with CRLF line terminators' && sed -i '3d' $i
done

论坛徽章:
0
9 [报告]
发表于 2007-03-09 00:23 |只看该作者
原帖由 ruifox 于 2007-2-27 09:03 发表
1、字符替换
perl -p -i -e "s/\.doc/\.docbak/g" *txt

2、删除第三行
for  i in `ls *txt`
do
         sed '3d' $i>$i.new
         mv $i $i.old
         mv $i.new $i
done


# sh mybatch.sh
删除第三不成功,出错:

sed: ls: No such file or directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

这是内容:
# cat sh mybatch.sh
#!/bin/sh
for i in 'ls *.txt'
do
    sed '3d' $i>$i.new
    mv $i $i.old
    mv $i.new $i
done

论坛徽章:
0
10 [报告]
发表于 2007-03-09 00:42 |只看该作者
原帖由 bdchina2003 于 2007-3-9 00:23 发表


# sh mybatch.sh
删除第三不成功,出错:

sed: ls: No such file or directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
usage: mv [-f | -i  ...

找到原因了

for i in 'ls *.txt'->for i in *.txt

运行正常.

谢谢各位的热心相助.

真没想到shell版这么多的雷峰
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP