sh/bash/dash/ksh/zsh等Shell脚本
-
kingstar
- 帖子: 22
- 注册时间: 2006-02-28 22:30
#1
帖子
由 kingstar » 2007-05-19 17:52
将某些扩展名的文件比如.txt/.c/.php的文件编码格式转换,写了个小脚本,但是有句不会写,goolge了半天也没搞明白,大家帮我看一下
代码: 全选
for i in *
do
if $i的扩展名是 .txt/.c/.php #这句不会写
then
echo "change file $i"
iconv -f gbk -t utf-8 $i -o "$i.tmp"
rm -f $i
mv "$i.tmp" $i
fi
done
有啥别的好方法也行,谢了
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#2
帖子
由 eexpress » 2007-05-19 18:22
for i in *txt *.c *.php
● 鸣学
-
stufever
- 帖子: 69
- 注册时间: 2007-03-11 17:48
#3
帖子
由 stufever » 2007-05-19 18:41
赞楼上,好思路
呵呵,我按照楼主的思路想了想,有这么个笨办法:
file 文件名 | awk -F ":" '{print $1}' |sed s'/.*\.//'
-
wkt
- 帖子: 849
- 注册时间: 2006-09-07 22:51
-
联系:
#4
帖子
由 wkt » 2007-05-19 18:58
stufever 写了:赞楼上,好思路
呵呵,我按照楼主的思路想了想,有这么个笨办法:
file 文件名 | awk -F ":" '{print $1}' |sed s'/.*\.//'
哪个sed能不能解释一下??
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#5
帖子
由 eexpress » 2007-05-19 19:30
如果要直接判断。应该这样
${i##*.}
别跑远路了。哈哈。
● 鸣学
-
kingstar
- 帖子: 22
- 注册时间: 2006-02-28 22:30
#6
帖子
由 kingstar » 2007-05-19 21:30
sed和${i##*.} 没看明白
我起初是想用grep来,但是除了第一个命令外,后面的正则表达式好像不好用
happy@happylinux:~$ echo "abc.php" | grep "php"
abc.php
happy@happylinux:~$ echo "abc.php" | grep "^[\w]+\.(php|css|txt|htm|html)$"
happy@happylinux:~$ echo "abc.php" | grep "(php|css)$"
happy@happylinux:~$ echo "abc.php" | grep "(php)$"
happy@happylinux:~$
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#7
帖子
由 eexpress » 2007-05-19 23:24
是这样的啊。
i=sljlskdjlk.slkjlweej; echo ${i##*.}
● 鸣学
-
stufever
- 帖子: 69
- 注册时间: 2007-03-11 17:48
#9
帖子
由 stufever » 2007-05-20 1:05
wkt 写了:
哪个sed能不能解释一下??
把从开始到"."的所有字符替换掉,用什么替换呢,//代表空,就是把它们都删掉。
-
stufever
- 帖子: 69
- 注册时间: 2007-03-11 17:48
#10
帖子
由 stufever » 2007-05-20 1:12
eexpress 写了:是这样的啊。
i=sljlskdjlk.slkjlweej; echo ${i##*.}
恩,好方法。
意思就是在字符串i中,把和.最远匹配前的所有字符都截断。
如果i=file.txt.exe,呵呵,输出结果应该是exe。
${i#*.}的话,输出应该事txt.exe,事最近匹配。
把#换成%事从后匹配。
-
kingstar
- 帖子: 22
- 注册时间: 2006-02-28 22:30
#11
帖子
由 kingstar » 2007-05-20 10:12
楼上几位都是高人啊
那能不能解释下 echo "abc.php" | grep "^[\w]+\.(php|css|txt|htm|html)$" 为什么没办法匹配呢?
搞不清楚心里总是不踏实
-
aBiNg
- 帖子: 1331
- 注册时间: 2006-07-09 12:22
- 来自: 南京
#12
帖子
由 aBiNg » 2007-05-20 10:29
kingstar 写了:
那能不能解释下 echo "abc.php" | grep "^[\w]+\.(php|css|txt|htm|html)$" 为什么没办法匹配呢?
搞不清楚心里总是不踏实
grep
-e
-
kingstar
- 帖子: 22
- 注册时间: 2006-02-28 22:30
#13
帖子
由 kingstar » 2007-05-20 10:57
我曾试过-e,好像没啥用
happy@happylinux:~$ echo "abc.php" | grep "^[\w]+\.(php|css|txt|htm|html)$"
happy@happylinux:~$ echo "abc.php" | grep -e "^[\w]+\.(php|css|txt|htm|html)$"
happy@happylinux:~$ echo "abc.php" | grep -e "php"
abc.php
happy@happylinux:~$ echo "abc.php" | grep "php"
abc.php
happy@happylinux:~$
-
stufever
- 帖子: 69
- 注册时间: 2007-03-11 17:48
#14
帖子
由 stufever » 2007-05-20 11:15
kingstar 写了:我曾试过-e,好像没啥用
happy@happylinux:~$ echo "abc.php" | grep "^[\w]+\.(php|css|txt|htm|html)$"
happy@happylinux:~$ echo "abc.php" | grep -e "^[\w]+\.(php|css|txt|htm|html)$"
happy@happylinux:~$ echo "abc.php" | grep -e "php"
abc.php
happy@happylinux:~$ echo "abc.php" | grep "php"
abc.php
happy@happylinux:~$
哦,为什么要用grep呢?
我刚才man了一下:
代码: 全选
grep, egrep, fgrep, rgrep - print lines matching a pattern
也就是说它是打印一行,而不是从一个字符串中匹配某个部分
-
kingstar
- 帖子: 22
- 注册时间: 2006-02-28 22:30
#15
帖子
由 kingstar » 2007-05-23 0:01
[:alpha:]是可以的了,还没搞清楚
happy@happylinux:~$ echo "abc.php" | grep '^[[:alpha:]]\+\.\(php\|css\|txt\|htm\|html\)$'
abc.php
happy@happylinux:~$ echo "abc.php" | grep '^[\w]\+\.\(php\|css\|txt\|htm\|html\)$'
happy@happylinux:~$