Chinaunix

标题: 怎样截去或者截取文件的后缀? [打印本页]

作者: huabingl    时间: 2003-12-11 16:05
标题: 怎样截去或者截取文件的后缀?
如题
作者: admirer    时间: 2003-12-11 16:18
标题: 怎样截去或者截取文件的后缀?
  1. filename=myfile.ext
  2. echo ${filename%.*}
  3. myfile
  4. echo ${filename#*.}
  5. ext
复制代码

作者: 網中人    时间: 2003-12-11 17:27
标题: 怎样截去或者截取文件的后缀?
看來 admirer 的 bash 技巧越來越順手了哦~~~  ^_^

不過,關於 ${filename#*.} 這個只會濾掉第一個 . 左邊而已哦,
若碰到 file.0.0.1.txt ,恐怕就抓不只是 txt 的結果了...
多加 # 會更準確些:
${filename##*.}

供參考。
作者: admirer    时间: 2003-12-11 17:56
标题: 怎样截去或者截取文件的后缀?
原帖由 "網中人" 发表:
看來 admirer 的 bash 技巧越來越順手了哦~~~  ^_^

不過,關於 ${filename#*.} 這個只會濾掉第一個 . 左邊而已哦,
若碰到 file.0.0.1.txt ,恐怕就抓不只是 txt 的結果了...
多加 # 會更準確些:
${filename#..........
谢谢,举例太简单了,所以隐藏了问题,还需要好好学学。
作者: qiuf    时间: 2003-12-11 23:25
标题: 怎样截去或者截取文件的后缀?
能不能例举一下${}语法的各种bash用法?想学习一下
作者: wxytty    时间: 2003-12-12 00:49
标题: 怎样截去或者截取文件的后缀?
截去比较好办:
awk -F"." '{print $1}' infile>outfile

对于截取,如果后缀是固定的也好办:
awk -F"." '{print $2$3$4}' infile>outfile

但如果后缀是变化的,用awk来处理俺就不知道了,请高手指点。
作者: r2007    时间: 2003-12-12 00:53
标题: 怎样截去或者截取文件的后缀?
[quote]原帖由 "wxytty" 发表:
截去比较好办:
awk -F"." '{print $1}' infile>outfile

对于截取,如果后缀是固定的也好办:
awk -F"." '{print $2$3$4}' infile>outfile

但如果后缀是变化的,用awk来处理俺就不知道了,请高手指点
作者: wxytty    时间: 2003-12-12 01:12
标题: 怎样截去或者截取文件的后缀?
把楼主的问题延伸一下,如果文本如下:

sina.com.cn
chinaunix.net
ccb.com.cn.net
www.bbc.abc.com.cn

我要取除第一个字段以外的所有字段如果取?也就是NF是变化的。用awk怎样办到?
作者: 網中人    时间: 2003-12-12 01:16
标题: 怎样截去或者截取文件的后缀?
[quote]原帖由 "qiuf"]能不能例举一下${}语法的各种bash用法?想学习一下[/quote 发表:

先看這篇:
http://www.chinaunix.net/forum/viewtopic.php?t=201843
作者: bjgirl    时间: 2003-12-12 01:22
标题: 怎样截去或者截取文件的后缀?
原帖由 "wxytty" 发表:
把楼主的问题延伸一下,如果文本如下:

sina.com.cn
chinaunix.net
ccb.com.cn.net
www.bbc.abc.com.cn

我要取除第一个字段以外的所有字段如果取?也就是NF是变化的。用awk怎样办到?
awk不会~~
不过用cut不是更方便嘛~~
  1. cut -d. -f2- <urfile
复制代码

作者: admirer    时间: 2003-12-12 07:30
标题: 怎样截去或者截取文件的后缀?
原帖由 "wxytty" 发表:
把楼主的问题延伸一下,如果文本如下:
sina.com.cn
chinaunix.net
ccb.com.cn.net
www.bbc.abc.com.cn
我要取除第一个字段以外的所有字段如果取?也就是NF是变化的。用awk怎样办到?

shell(ksh,bash)就可以
  1. cat f | while read line
  2. do
  3.    echo ${line#*.} #拿掉第一个域
  4.   echo ${line%%.*} #保留第一个域
  5.   echo ${line%.*} #拿掉最后一个域
  6.    echo ${line##*.} #保留最后一个域
  7. done
复制代码





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