温习(十)Linux 简单的文件处理
tr 命令
tr 命令可以删除特定的某个字符
tr [option]...SET1 [SET2]
将所有的小写替换成大写
删除 "hello shiyanlou" 中所有的'o','l','h'
$ echo 'hello shiyanlou' | tr -d 'olh'
# 将"hello" 中的ll,去重为一个l
$ echo 'hello' | tr -s 'l'
col
可以将tab换成等数量的空格键,或反转这个操作
-x 将Tab转换为空格
-h 将空格转换为Tab(默认选项)
效果肯定是显然易见了吧!!!
jion 命令
使用方式:
join [option]... file1 file2
常用的选项有:
选项 说明
-t 指定分隔符,默认为空格
-i 忽略大小写的差异
-1 指明第一个文件要用哪个字段来对比,默认对比第一个字段
-2 指明第二个文件要用哪个字段来对比,默认对比第一个字段
合并命令
但是有个缺陷 两个文件必要要有重复的字符不然不会处理
# 将/etc/passwd与/etc/group两个文件合并,指定以':'作为分隔符, 分别比对第4和第3个字段 $ sudo join -t':' -1 4 /etc/passwd -2 3 /etc/group
paste 命令
简单将多个文件合并,以tab分开
paste [option] file...
选项 说明
-d 指定合并的分隔符,默认为Tab
-s 不合并到一行,每个文件为一行
小游戏
$ sudo apt-get install ninvaders
$ /usr/games/ninvaders
重定义文本 ">>" " > "
> 覆盖
>> 追加
第一种 > 会清空所有的数据
第二中 >> 会在数据的基础上追加文本
Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)。
文件描述符 设备文件 说明
0 /dev/stdin 标准输入
1 /dev/stdout 标准输出
2 /dev/stderr 标准错误
标准错误重定向
文件 2>&1
示例
cat /etc/pwddd asdsadsa > 重定向文件名 2>&1
cat /etc/pwww sdsadsad &>重定向文件名
tee 命令
既要打印出来,也要重定向到文件中
echo "ttttttttttt" | tee 文件名
这个方法我们在脚本中很适用哦!
永久重定向 exec
比如在一个脚本中,你需要某一部分的命令的输出全部进行重定向,
难道要让你在每个命令上面加上临时重定向的操作嘛,当然不需要,
我们可以使用exec命令实现“永久”重定向。exec命令的作用是使用指定的命令替换当前的 Shell,
即使用一个进程替换当前进程,或者指定新的重定向:
zsh先开启一个子shell
exec 1>文件名
然后输入任意命令
ls
exit 推出子shell
cat 刚刚定义的文件名
我们还可以重定义 文件描述 在文件我们0-9
cd /dev/fd ll 可以看到我们重定义文件的具体文件
$ zsh
$ exec 3>somefile
# 先进入目录,再查看,否则你可能不能得到正确的结果,然后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>与&之间不应该有空格,如果有空格则会出错
$ echo "this is test" >&3
$ cat somefile
$ exit
我们打开怎么关闭呢,下面就是关闭方法。
黑洞 /dev/null
cat Documents/test.c 1>/dev/null 2>&1
Linux xargs 命令
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 一般是和管道一起使用。
命令格式:
somecommand |xargs -item command
参数:
- -a file 从文件中读入作为sdtin
- -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
- -p 当每次执行一个argument的时候询问一次用户。
- -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
- -t 表示先打印命令,然后再执行。
- -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
- -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
- -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
- -L num 从标准输入一次读取 num 行送给 command 命令。
- -l 同 -L。
- -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
- -x exit的意思,主要是配合-s使用。。
- -P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。
实例
xargs 用作替换工具,读取输入数据重新格式化后输出。
定义一个测试文件,内有多行文本数据:
# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
多行输入单行输出:
# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
-n 选项多行输出:
# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
-d 选项可以自定义一个定界符:
# echo "nameXnameXnameXname" | xargs -dX
name name name name
结合 -n 选项使用:
# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name
xargs 结合 find 使用
用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
xargs -0 将 \0 作为定界符。
统计一个源代码目录中所有 php 文件的行数:
查找所有的 jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
xargs 其他应用
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
# cat url-list.txt | xargs wget -c