温习(十)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

我们打开怎么关闭呢,下面就是关闭方法。

$ exec 3>&-

$ cd /dev/fd;ls -Al;cd -

 

 

黑洞 /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
 
posted @ 2020-02-11 16:24  菜菜920  阅读(133)  评论(0编辑  收藏  举报