Linux_Shell脚本学习第二章-命令之乐(上)

一、用cat 进行拼接

1.1 读取文件内容

1.1.1 打印单个文件的内容
$ cat file.txt
This is a line inside file.txt
This is the second line inside file.txt
1.1.2 打印多个文件的内容
$ cat one.txt two.txt
This line is from one.txt
This line is from two.txt

1.2 从标准输入中读取数据

管道操作符可以将数据作为cat命令的标准输入:

OUTPUT_FROM_SOME COMMANDS | cat

1.3 将文件内容与终端输入拼接在一起

下面的命令将stdin和另一个文件中的数据组合在一起,-被作为stdin文本的文件名:

$ echo 'Text through stdin' | cat - file.txt
Text throught stdin
This is file.txt

1.3 去除多余的空白行

有时候文本文件中可能包含多处连续的空白行。如果你想删除这些额外的空白行,可以这样做:

$ cat -s file

例如:

$ cat multi_blanks.txt
line1

line2

line3

line4
$ cat -s multi_blanks.txt #压缩相邻的空白行
line 1
line 2
line 3
line 4

1.4 将制表符显示为^I

用cat命令的-T选项能够将制表符标记成^I。例如:

$ cat file.py
def function():
var = 5
next = 6
third = 7
$ cat -T file.py
def function():
^Ivar = 5
^I^Inext = 6
^Ithird = 7^I

1.5 显示行号

cat命令的-n选项会在输出的每一行内容之前加上行号。例如:

$ cat lines.txt
line
line
line
$ cat -n lines.txt
1 line
2 line
3 line

二、查找并列出文件

2.1 预备知识

find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作。默认的操作是打印出文件和目录,这也可以使用-print选项来指定。

2.2 实战演练

2.2.1 列出给定目录下所有的文件和子目录
$ find base_path

bash_path可以是任意位置(例如/home/slynux),find会从该位置开始向下查找。例如:

$ find . -print
.history
Downloads
Downloads/tcl.fossil
Downloads/chapter2.doc
…

print选项使用\n(换行符)分隔输出的每个文件或目录名。而-print0选项则使用空字符’\0’来分隔。

2.2.2 根据文件名或正则表达式进行搜索

-name选项指定了待查找文件名的模式。这个模式可以是通配符,也可以是正则表达式。在下面的例子中,’*.txt’能够匹配所有名字以.txt结尾的文件或目录。

$ find /home/slynux -name '*.txt' -print

注意*.txt两边的单引号。shell会扩展没有引号或是出现在双引号(")中的通配符。单引号能够阻止shell扩展*.txt,使得该字符串能够原封不动地传给find命令。
find命令有一个选项-iname(忽略字母大小写),该选项的作用和-name类似,只不过在匹配名字时会忽略大小写。例如:

$ ls
example.txt EXAMPLE.txt file.txt
$ find . -iname "example*" -print
./example.txt
./EXAMPLE.txt

find命令支持逻辑操作符。-a和-and选项可以执行逻辑与(AND)操作,-o和-or选项可以执行逻辑或(OR)操作。

$ ls
new.txt some.jpg text.pdf stuff.png
$ find . \( -name '*.txt' -o -name '*.pdf' \) -print
./text.pdf
./new.txt

上面的命令会打印出所有的.txt和.pdf文件,因为这个find命令能够匹配所有这两类文件。\(以及\)用于将 -name '.txt’ -o -name '.pdf’视为一个整体。

下面的命令演示了如何使用-and操作符选择名字以s开头且其中包含e的文件:

$ find . \( -name '*e*' -and -name 's*' \)
./some.jpg

-path选项可以限制所匹配文件的路径及名称。

$ find /home/users -path '*/slynux/*' -name '*.txt' –print
2.2.3 否定参数

find也可以用!排除匹配到的模式

$ find . ! -name "*.txt" -print

上面的find命令能够匹配所有不以.txt结尾的文件。该命令的运行结果如下:

$ ls
list.txt new.PY new.txt next.jpg test.py
$ find . ! -name "*.txt" -print
.
./next.jpg
./test.py
./new.PY
2.2.4 基于目录深度的搜索

find命令在查找时会遍历完所有的子目录。默认情况下,find命令不会跟随符号链接。-L选项可以强制其改变这种行为。但如果碰上了指向自身的链接,find命令就会陷入死循环中。

-maxdepth和–mindepth选项可以限制find命令遍历的目录深度。这可以避免find命令没完没了地查找。

/proc文件系统中包含了系统与当前执行任务的信息。特定任务的目录层次相当深,其中还有一些绕回到自身(loop back on themselves)的符号链接。系统中运行的每个进程在proc中都有对应的子目录,其名称就是该进程的进程ID。这个目录下有一个叫作cwd的链接,指向进程的当前工作目录。
下面的例子展示了如何列出运行在含有文件bundlemaker.def的目录下的所有任务:

$ find -L /proc -maxdepth 1 -name 'bundlemaker.def&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值