shell脚本获取文件中的版权(Copyright)
shell脚本代码如下:
#!/bin/bash# get file copyright
if [ -f "$1" ]; thenfile_copyright=`head -100 "$1" | grep -i "Copyright (C)"`if [ -n "$file_copyright" ]thenfile_copyright=${file_copyright#*([Cc]) }echo "111 file copyright: $file_copyright"file_copyright=`echo "$file_copyright" | sed 's/\W*$//'`echo "222 file copyright: $file_copyright"file_copyright="Copyright "$file_copyrightelsefile_copyright="NONE"fiecho "file copyright: $file_copyright"
elseecho "$1 is not a file"
fi
代码看似简单,实际上其中蕴藏着几个知识点:
知识点1 shell中#*,##*,#*,##*,% *,%% *的含义及用法
对应代码:file_copyright=${file_copyright#*([Cc]) }
假设定义了一个变量为:
代码如下: file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
${file##*.}:删掉最后一个 . 及其左边的字符串:txt
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)
${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
代码的意思是先取文件的前100行,在其中搜索包含“Copyright (C)”关键字的行,
实际文件中的内容实例如下(截取):
GNU LIBRARY GENERAL PUBLIC LICENSEVersion 2, June 1991Copyright (C) 1991 Free Software Foundation, Inc.51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USAEveryone is permitted to copy and distribute verbatim copiesof this license document, but changing it is not allowed.
也就是说运行file_copyright=`head -100 "$1" | grep -i "Copyright (C)"`会得到如下结果:
Copyright (C) 1991 Free Software Foundation, Inc.
之后再执行file_copyright=${file_copyright#*([Cc]) },意思是删掉第一个[C]或[c]及其左边的字符串,会得到如下结果:
1991 Free Software Foundation, Inc.
对于大多数文件,这样就可以了。但实际中有些文件比较“各色”,比如以下内容:
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
对于这样的格式,如果只运行到以上步骤,会得到如下结果:
2002-2003 Dmitriy Anisimkov --
可以看到后边多了无用的空格以及'-'。如何去掉这些无用字符?这就是第二个知识点。
知识点2 shell中通过sed删除非单词字符
对应代码:file_copyright=`echo "$file_copyright" | sed 's/\W*$//'`
要先弄清楚这句代码的意思,先来看一下类似的代码:
删除行尾空白
sed -i ‘s/\s*$//’
格式为:sed ‘s/要被取代的字串/新的字串/g’
s:替换
\s:空格
*:0-n匹配字符
$:行尾
我们这里不是对文件,因此去掉-i参数,另外将\s换为\W,关于\s以及\W的具体意义如下:
\s 任何空白字符
\S 任何非空白字符
\d 任何数字
\D 任何非数字
\w 任何单词字符(字母、数字、下划线)
\W 任何非单词字符
这句代码实际完成的工作是:去掉到行结尾处的非单词字符。执行此语句后,结果如下:
2002-2003 Dmitriy Anisimkov
可见,空格和'-'都被去掉了。
到这里还不算完成,还要确保对于一般情况也适用,不会有影响。
Copyright (C) 1991 Free Software Foundation, Inc.
对于这种情况,最终会得到:
1991 Free Software Foundation, Inc
可见虽然比之前的结果少了一个结尾处的'.',但影响不大,可以接受。
这样脚本就可以正常工作,获取文件中的版权了。
shell脚本获取文件中的版权(Copyright)相关推荐
- Linux中使用shell脚本向文件中写数据
以前没写过shell脚本,懂得一些Linux的操作命令.看了网上一些shell脚本的方法.总结,发现用脚本将一些数据写入文件比较实用.遂举例如下: #!/bin/bash #Test echo &qu ...
- shell脚本替换文件中字符
1.将当前目录下包含jack串的文件中,jack字符串替换为tom sed -i "s/jack/tom/g" `grep "jack" -rl ./` 2.将 ...
- Linux中 shell 脚本获取当前工作目录的方法
Linux中 shell 脚本获取当前工作目录的方法 1. 示例 2. 注意: 参考: 1. 示例 test.sh target_dir=$(cd $(dirname $0); pwd) echo $ ...
- 在linux中编写shell脚本文件,如何编写简单的Shell脚本(Script)文件之Linux的基本操作...
如何编写简单的Shell脚本(Script)文件之Linux的基本操作 新建一个文本文件包含所需要的脚本.举例,我会使用pico编辑器写一个脚本用来运行程序tar,带上必要的可选项可以用来解压从因特网 ...
- shell脚本读取文件夹内文件名称
shell脚本读取文件夹内文件名称代码如下: 1.配置文件: readFilePath=/wocloud/soft/tomcat/selfYearAppraiseTomcat/selfYearAppr ...
- shell脚本获取mysql插入数据自增长id的值
shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...
- shell脚本获取cpu、内存、磁盘使用率
1.获取cpu使用率脚本 #!/bin/sh # #脚本功能描述:依据/proc/stat文件获取并计算CPU使用率 # #CPU时间计算公式:CPU_TIME=user+system+nice+id ...
- iOS中更新版权 Copyright
iOS中更新版权 // Copyright ©️ 背景 由于公司组织架构调整,增量code可能会有新的版权©️调整,因此需要更新Copyright 方法 修改 Created by xxx 系统偏好设 ...
- python3文件下载-python3获取文件中url内容并下载代码实例
这篇文章主要介绍了python3获取文件中url内容并下载代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 #!/usr/bin/env py ...
最新文章
- 一文读懂Python复杂网络分析库networkx | CSDN博文精选
- 腾讯发布最新开源jdk!
- MQTT基础——Part 1. 认识MQTT
- Source Insight 格式化
- 面试题目--MPEG4与H.264的区别
- 服务器账户登录监控系统,服务器账户登录监控系统
- java synchronized关键字_Java synchronized 关键字,你用的对吗?
- Qt工作笔记-Qt文档笔记-QPainter::drawText写文本并且居中
- b站测试岗怎么样_情商测试《大家一起察言观色》,一款适合作为B站测试题的游戏...
- jquery 所有contenteditable=true的元素_JavaScript学习笔记(三十一) jQuery(上)
- 无线AP与无线路由器都有些什么区别?(一)
- 算法导论的道与术、工程师思维奠定能走多远
- 数学模型 商人过河问题 C++实现
- REST, Hypermedia HATEOAS - Django REST framework
- php ios表情包,[iOS] 自定义表情包
- 我的简约论坛php源码,我的论坛源代码(二)
- SAP那些事-理论篇-3-SAP到底是个什么东东
- 用python解矩阵方程_用Python的Numpy求解线性方程组
- BSGS(拔山盖世算法),北上广深算法
- Android DirectBoot模式