快捷搜索:
来自 67677新澳门手机版 2019-07-14 21:23 的文章
当前位置: 67677新澳门手机版 > 67677新澳门手机版 > 正文

67677新澳门手机版记录一次批量处理文档的过程,

要做一项工作,内容是将一个word中的图表复制到多个(接近300个)word文档的末尾,不想一个个CTRL C CTRL V,就想到了用程序来实现

很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。

我第一个想到的使用python来实现,由于技术太渣,尝试了多次,没能写出来,只记得有一个叫做win32com的模块,专门处理文档的。这里先不说了

下面介绍两种常用的方法来进行相关的操作。

在查阅资料的过程中,偶然看见在linux中的cat命令似乎能做这件事,恰好我装了centos7,也在学习这Linux命令,于是转战linux。

一、使用${}

对这个工作,我分三步进行:

1、${var##*/}
该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下:

1:使用cat命令将一个文档追加到另一个文档末尾

67677新澳门手机版 1

2:得到一个目录下的所有文件名(后面讲为什么)

从运行结果可以看到,使用该命令,可以提取出我们需要的文件名file.txt。

3:   写shell脚本实现功能

若使用时在shell程序文件中,可以使用变量来保存这个结果,再加以利用,如file=${var##*/}

一:关于cat命令

2、${var##*.}

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。 

该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下:

1.命令格式:

67677新澳门手机版 2

  cat [选项] [文件]...

从运行结果可以看到,使用该命令,可以提取出我们需要的文件后缀。

2.命令功能:

如果文件的后缀不仅有一个,例如,file.tar.gz,命令${var##*.}仅能提取最后一个后缀,而我想提取tar.gz时该怎么办?那么就要用下面所说的${var#*.}命令了。

  cat命令的功能:

3、${var#*.}

  1.一次显示整个文件:cat filename  

该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下:

  2.从键盘创建一个文件:cat > filename  只能创建新文件,不能编辑已有文件.

67677新澳门手机版 3

  3.将几个文件合并为一个文件:cat file1 file2 > file

从运行结果可以看到,使用该命令,可以提取出文件的多个后缀。

  4.在一个文件后追加另一个文件:cat file1 >> file2

4、${var%/*}

3.命令参数:

该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:

  -A, --show-all           等价于 -vET

67677新澳门手机版 4

  -b, --number-nonblank    对非空输出行编号

从运行的结果可以看到,使用该命令,可以提取出我们需要的文件所在的目录

  -e                       等价于 -vE

5、${var%%.*}

  -E, --show-ends          在每行结束处显示 $

该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下:

  -n, --number     对输出的所有行编号,由1开始对所有输出的行数编号

67677新澳门手机版 5

  -s, --squeeze-blank  有连续两行以上的空白行,就代换为一行的空白行 

当我们需要建立一个与文件名相同名字(没有后缀)的目录与对应的文件相对应时,就可以使用该命令来进行操作。例如,解压文件的情况就与此类似,我们压缩文件file.zip时,会在与file.zip同级目录下建立一个名为file的目录。

  -t                       与 -vT 等价

6、${}总结

  -T, --show-tabs          将跳格字符显示为 ^I

其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。

  -u                       (被忽略)

看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。

  -v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外

#:表示从左边算起第一个

这里给出几个实例:

%:表示从右边算起第一个

1:把 file1 的文档内容加上行号后输入 file2 这个文档里

##:表示从左边算起最后一个

cat -n file1 > file2

%%:表示从右边算起最后一个

注意这里是吧file1的内容输入到file2中,file2若存在,则清空内容,里面输入file1内容,若不存在则创建file2,输入file1内容

换句话来说,#总是表示左边算起,%总是表示右边算起。

2:把 file1 和 file2 的文档内容加上行号(空白行不加)之后将内容追加到 file3 文档里:

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##67677新澳门手机版 ,的右边,反之亦然。

cat -b file1 file2 >>file3

例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。

该操作不会改变file3中原有的内容,把file1和file2的内容追加到file3的末尾

看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。

3:创建一个名为a.txt的文件

二、basename和dirname

cat >a.txt <<EOF
>EOF

${}并不是专门为提取文件名和目录名设计的命令,那么basename和dirname命令就是专门为做这一件事而已准备的了。

 输入第一行后,输入EOF,回车,就可以生成一个 a.txt 文件。其中EOF是告诉 bash 哪个符号代表文件结束。当然你也可以使用自己习惯的符号。

1、basename

4: 利用cat清空文件内容

该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。

如果 b.txt 文件有很多内容,而你想要清空的话,同样可以使用上面提到的命令形式:

1)从路径中提出出文件名(带后缀),例子如下:

cat >b.txt << EOF
>EOF

67677新澳门手机版 6

5: cat命令可以直接向文件中写入东西,并覆盖掉原本的东西

2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:

cat >c.txt  <<EOF
>2222
>3333
>EOF

67677新澳门手机版 7

利用cat命令处理的时候,尽量带上文件的格式,例如1.txt,1.doc

2、dirname

要是第一步,文件追加需要用到这个命令

该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME

cat file1 >> file2

使用例子如下:

二:获取一个目录下的文件名

67677新澳门手机版 8

 获取目录下的文件名可以直接使用    ls   命令,但只是将名字打印出来,不能获得这个名字,也就是说如果想要在后面使用cat命令对这些文件进行处理的话,需要用一个变量来接收这些文件名,再对这个变量进行cat操作

这样就提取出了file.txt文件所在的目录。

下面介绍两种常用的方法来进行相关操作

注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:

1:使用${ }

67677新澳门手机版 9

${var##*/} 

它提取出了目录dir2所在的目录dir1.

该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

使用例子及结果如下:

您可能感兴趣的文章:

  • linux中快速列出文件列表的多种方法总结
  • linux 获取文件名称并生成列表txt的方法
~$ var = /dir1/dir2/file.txt
~$ echo ${var##*/}
file.txt

从运行结果可以看到,使用该命令,可以提取出我们需要的文件名file.txt。

若使用时在shell程序文件中,可以使用变量来保存这个结果,再加以利用,如file = ${var##*/}

${var##*.}

该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.txt
~$ echo ${var##*.}
txt

从运行结果可以看到,使用该命令,可以提取出我们需要的文件后缀。

如果文件的后缀不仅有一个,例如,file.tar.gz,命令${var##*.}仅能提取最后一个后缀,而我想提取tar.gz时该怎么办?那么就要用下面所说的${var#*.}命令了。

${var#*.}

该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.tar.gz
~$ echo ${var#*.}
tar.gz

从运行结果可以看到,使用该命令,可以提取出文件的多个后缀.

${var%/*}

该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.txt
~$ echo ${var%/*}
/dir1/dir2

使用该命令,可以提取出我们需要的文件所在的目录.

${var%%.*}

该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.txt
~$ echo ${var%%.*}
/dir/dir/file

本文由67677新澳门手机版发布于67677新澳门手机版,转载请注明出处:67677新澳门手机版记录一次批量处理文档的过程,

关键词: