Shell脚本合并文本文件

有时候,要遇到将多个文件合并成一个的需要,除了重复的复制和粘贴,还可以通过Shell来辅助实现。下面是两种实现方案。

1、写一个Shell脚本

这里通过运行merge.sh可以将同目录下的所有的txt文件合并到all.all。

merge.sh:

ls *.txt |
while read file_name;
do
    # 用.为分隔符只要文件名,去掉文件后缀
    echo "${file_name%.*}:" >> all.txt
    cat "$file_name" >> all.txt
    echo "" >> all.txt
done

效果如下:


File Merge Example

2、cat命令

上面的方法中,需要写一个Shell脚本,有些麻烦。其实,可以直接通过cat命令来实现。
默认地,cat命令可以直接接收多个参数,这样,通过重定向可以很方便地合并文件:


File Merge with cat -

但是,如果想在各个文件内容的前面加一些说明,就像前面的shell脚本一样,就需要利用cat命令的一个小feature。下面是man cat中的描述:

The cat utility reads files sequentially, writing them to the standard output. The file operands are processed in command-line order. If file
is a single dash (`-') or absent, cat reads from the standard input.
如果cat接收的文件名参数为“-”或者没有,cat命令就从标准输入读取内容。

利用这一点,我们可以在文件参数之间间隔加入“-”。这样,每当读取完一个文件的内容,cat都会从标准输入读取下一个文件的说明信息。结束输入的时候,我们需要按Ctrl+d输入EOF,来结束标准输入读取。如下:


File Merge with cat -

3、附

前面的脚本中用到了shell字符串变量的截取,在下面补充下截取方法说明:

{varible##*string} 从左向右截取最后一个string后的字符串{varible#string}从左向右截取第一个string后的字符串
{varible%%string*}从右向左截取最后一个string后的字符串{varible%string
}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
From: https://blog.csdn.net/lizhidefengzi/article/details/76762059

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,464评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,817评论 0 10
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 10,186评论 3 53
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,213评论 1 19
  • 今个儿叶又飘起来 霜也降下来 来不及细看点点璨璨的光 只一心奔赴食堂 你若问我为什么 ...
    _高岩阅读 356评论 5 8