Linux指令大全

一、查看与操作文件目录及文本内容

1.新建文件,目录

新建目录(文件夹):

mkdir 目录名

新建文件:

touch 文件名.格式

2.移动文件,目录

移动目录(文件夹):

mv 文件夹1地址 文件夹2地址

移动文件:

mv 文件地址 文件夹地址
mv 文件夹1/* 文件夹2地址  #把文件夹1下的所有文件移动到文件夹2中。

3.删除文件,目录

删除目录(文件夹):

rm -rf 文件夹地址 #递归删除文件夹中的所有文件和文件夹。

删除文件:

rm -f 文件地址

4.复制文件,目录

复制目录(文件夹):

cp -r 文件夹1地址 文件夹2地址

复制文件:

cp 文件地址 文件夹地址

5.查看文本内容

grep:用于查找文件里符合条件的字符串。语法:

grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式] 文件或目录地址

eg:

grep -r “update” /etc/acpi #查找指定目录/etc/acpi 及其子目录下所有包含字符串"update"的文件,并打印出该字符串所在行的内容

参数:

-a 或 --text : 不要忽略二进制的数据。
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-i 或 --ignore-case : 忽略字符大小写的差别。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-q 或 --quiet或--silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显示错误信息。
-v 或 --invert-match : 显示不包含匹配文本的所有行。
-V 或 --version : 显示版本信息。
-w 或 --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。

  find: 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。语法:

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

eg:

 find . -name "*.c" #将当前目录及其子目录下所有文件后缀为 .c 的文件列出来

参数:
  find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件。
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件
-gid n or -group name : gid 是 n 或group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件

head: 用于显示文件开头的内容,默认情况下,只显示文件的头10行内容

head    file1      					显示文件file1的头部10行内容;
head  -n  <行数>   filename      显示文件内容的前n行;
head  -c  <字节>   filename      显示文件内容的前n个字节;

tail: 用于显示文件尾部的内容,默认情况下只显示指定文件的末尾10行;

tail    file1      					显示文件file1的尾部10行内容;
tail  -n  <行数>  filename    显示文件尾部的n行内容;
tail  -c  <字节数>   filename     显示文件尾部的n个字节内容;

more:以一页一页的形式显示文件内容,按空白键(space)显示下一页内容,按Enter键会显示下一行内容,按 b 键就会往回(back)一页显示。

more    file1             查看文件file1的文件内容;
more   -num   file2    查看文件file2的内容,一次显示num行;
more   +num   file3   查看文件file3的内容,从第num行开始显示;

cat:显示文件内容,如果文件内容过多,则只会显示最后一屏的内容。

cat   file1        用于查看文件名为file1的文件内容;
cat   -n   file2       查看文件名为file2的文件内容,并从1开始对所有输出的行数(包括空行)进行编号;
cat   -b   file3      查看文件名为file3的文件内容,并从1开始对所有的非空行进行编号;

6.查看当前所在目录

pwd

7.查看目录下文件

ls
ls -a

8.文件的属性及标志位

  Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。

9.变更文件及目录的属性

更改文件夹名:

mv 文件夹名1 文件夹名2

更改文件名和格式:

mv 文件名称1.文件格式1 文件名称2.文件格式2

二、变量与相关操作

1.变量类别及的作用域

本地变量:

varname=value #作用域为整个bash进程可以使用;

局部变量:

local varname=value #作用域为当前代码段;

环境变量:
作用域为当前shell进程及其子进程,不能影响到其父进程;
export varname=value,如果变量已经定义可以只是用变量名 export varname,即

export varname=value
varname=value
export varname

特殊变量:

$? #上一个命令执行状态的返回值:

程序执行可能有两种返回值:

  1. 程序执行结果
  2. 程序状态返回吗(0-255)
    0 则为执行正确
    1-255 则执行出错(1,2,127系统预留);
$#:获取当前shell命令行中参数的总个数
$*:获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制
$@:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制
$0 获取当前执行的shell脚本的文件名
$n 获取当前执行的shell脚本的第n个参数值,n=1..9
$$ 获取当前shell的进程号(PID)
$! 执行上一个指令的PID

2.变量命名

  1. 只能含字母、数字和下划线,并且以字母和下划线开头
  2. 不能使用bash里的关键字(可用help命令查看保留关键字)
  3. 见名知意

3.删除变量

使用 unset 命令可以删除变量。

unset variable_name

4.只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

myUrl="https://www.google.com"
readonly myUrl

5.数组变量

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
定义数组:

数组名=(值1 值2 ... 值n)

读取数组:

${数组名[下标]}
Eg: valuen=${array_name[n]}

使用 @ 符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

获取数组长度:

length=${#array_name[@]}
length=${#array_name[*]}

三、正则表达式及替换

1.变量替换

字符变量:

$变量名

数组变量:

${数组名[下标/@/*]}

2.算术替换

$((1+2*3))
a=1,b=2,c=6
$((a+c*b))

3.模式匹配

检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中提取符合某个条件的子串等。
限定符

‘zo*’ 能匹配 "z" 以及 "zoo"* 等价于{0,}
'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"+ 等价于 {1,}"do(es)?" 可以匹配 "do""does""doxy" 。? 等价于 {0,1}'o{2}' 不能匹配 "Bob" ,但是能匹配 "food"{n,m} m 和 n 均为非负整数,其中n <= m。重复前面匹配的字符n-m次,至少n次,最多m次。
/[0-9]{1,2}/ 设置0-99

定位符

^ 和 $ 分别指字符串的开始与结束。
\b 描述单词的前或后边界,\B 表示非单词边界。

4.选择

参考博客:https://blog.csdn.net/a321123b/article/details/117437912

industr(?:y|ies) 等价于 industry|industries。
xxx(?=pattern),捕获以pattern结尾的内容xxx 。如:"Windows(?=95|98|NT|2000)"能匹配"Windows2000",但不能匹配"Windows3.1"。
xxx(?!pattern),捕获不以pattern结尾的内容xxx。如:"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"(?<=pattern)xxx,捕获以pattern开头的内容xxx。如:" (?<=95|98|NT|2000)Windows"能匹配"2000Windows",但不能匹配"3.1Windows"
(?<!pattern)xxx,捕获不以pattern开头的内容xxx。如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"

5.反向引用

例如

源字符串:abcdebbcde
正则表达式:([ab])\1
匹配到:bb
([a-z])\1{2}”表示连续三个相同的小写字母,
“([a-z])\1+”表示连续的n个相同的小写字母。

var str = "Is is the cost of of gasoline going up up";
var patt1 = /\b([a-z]+) \1\b/ig;//统计单词重复数

6.grep正则表达式搜索

grep -[acinv] '搜索内容串' filename
-a 以文本文件方式搜索
-c 计算找到的符合行的次数
-i 忽略大小写
-n 顺便输出行号
-v 反向选择,即找 没有搜索字符串的行

其中搜索串可以是正则表达式!

grep正则式,支持awk sed

#搜索有the的行,并输出行号
$grep -n 'the' regular_express.txt
#搜索没有the的行,并输出行号
$grep -nv 'the' regular_express.txt
#[]搜索
$ grep -n 't[ae]st' regular_express.txt
8:I can't finish the test.
9:Oh! the soup taste good!
#搜索oo前没有g的字符串所在的行
$ grep -n '[^g]oo' regular_express.txt
#搜索包含数字的行
grep -n '[0-9]' regular_express.txt
#搜索以小写字母开头的行
grep -n '^[a-z]' regular_express.txt
#搜索开头不是英文字母的行
grep -n '^[^a-zA-Z]' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
21:#I am VBird
#搜索末尾是.的行
$ grep -n '\.$' regular_express.txt
2:apple is my favorite food.
3:Football game is not use feet only.
#搜索空行
grep -n '^$' regular_express.txt
22:
23:
g??d 可以用 'g..d' 表示
grep -n 'g..d' regular_express.txt
2:apple is my favorite food.
3:Football game is not use feet only.
#搜索g开头和结尾的字符串在的行
$ grep -n 'g.*g' regular_express.txt
#搜索包含两个o的字符串的行
grep -n 'o\{2\}' regular_express.txt
#去除 空白行和行首为 #的行
grep -v '^$' regular_express.txt | grep -v '^#'
egrep -v '^$|^#' regular_express.txt

7.引用及特殊符号

在这里插入图片描述

四、输入输出与参数传递

1.获取键盘输入

read varname 

如:

read num #接收单个输入
#输入一个数字5
echo $num #打印5
read arr #接收数组
#输入一个数组1 2 3 4 5
echo ${arr[*]} #打印1 2 3 4 5

2.脚本运行时参数传入

脚本内获取参数的格式为:

$n  #n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

实例

echo "Shell 传递参数实例!";
echo "第一个参数为:$1";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

3.Print和printf

Print和printf的区别:
1.print是ksh的内置命令,而printf是bash的内置命令
2.print 中不能使用%s ,%d 或%c;
3.print 自动换行,printf 没有自动换行。
Printf
语法:

printf  format-string  [arguments...]

实例:

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

输出:
在这里插入图片描述

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

4.转义字符:

在这里插入图片描述

5.从文件读入及写到文件

在这里插入图片描述

  编辑文件的一般流程:输入vi 或vim编辑文件进入一般模式,按i进入编辑模式,编辑完成后按esc返回一般模式,按shift+:进入命令模式,输入wq回车保存并退出。
在这里插入图片描述

6.管道

将前面命令结果输送给后面的命令
比如统计当前目录有多少个文件:

ls | wc -l

上面是表示把前面的输出当作后面的输入,管道还可以带上xargs参数,用于表示把前面的输出当作后面的参数

find . -name "*.c" | xargs grep "apple" -Hnr

xrargs代表find的输出作为grep的参数,否则grep只会在find找出的文件列表名称中找apple的,不会进入文件中找。

五、条件语句及循环

1.If语句

简单if:

if condition
then
    command 
fi
if-else-if-else:
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

如:

if [ $a == $b ];  #注意shell中中括号两端一定要加空格!!!
then echo "a==b"; 
elif [ $a -gt $b ]; 
then  echo "a>b"; 
elif [ $a -lt $b ]; 
then echo "a<b"; 
else echo "none"; 
fi

2.While…do和Do….while

while condition
do
    command
done

如:

i=1
while (( $i<5 )); 
do echo $i; 
let i++; 
done

3.Case语句

case 值 in
模式1)
    command1
    ;;
模式2)
    command2
    ;;
esac

如:

read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

4.For语句

for var in item1 item2 ... itemN
do
    command
done

如:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

又比如:

for num in ${arr[*]} #arr为定义的数组
do 
echo $num
done

5.Until语句

循环执行一系列命令直至条件为 true 时停止。

until condition
do
    command
done

如:

until [ ! $a -lt 10 ];
do 
echo $a;
let a++;
done

6.Select语句

select var in item1 item2 ... ; do
 break;
done
.... now $var can be used ....

如:

echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; 
do
  break;
done
echo "You have selected $var"

六、进程操作

1.察看进程信息

  htop :个人墙裂推荐使用htop,虽然需要额外安装,但它显示简单直接且美观炫酷,是装13神器,下面放一个效果图,具体怎么看这里就不细说了:
在这里插入图片描述

  ps:(英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
语法

ps [options] [--help]

参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x) 输出格式 :
	USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
	oUSER: 行程拥有者
	oPID: pid
	o%CPU: 占用的 CPU 使用率
	o%MEM: 占用的记忆体使用率
	oVSZ: 占用的虚拟记忆体大小
	oRSS: 占用的记忆体大小
	oTTY: 终端的次要装置号码 (minor device number of tty)
	oSTAT: 该行程的状态:
		D: 无法中断的休眠状态 (通常 IO 的进程)
		R: 正在执行中
		S: 静止状态
		T: 暂停执行
		Z: 不存在但暂时无法消除
		W: 没有足够的记忆体分页可分配
		<: 高优先序的行程
		N: 低优先序的行程
		L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
	oSTART: 行程开始时间
	oTIME: 执行的时间
	oCOMMAND:所执行的指令

实例

ps -A #查看所有进程
ps -aux#查看所有进程的详细信息
ps -aux | grep php#查看所有php进程的详细信息
ps -ef //显示所有命令,连带命令行

根据端口号查进程号
方法一:lsof -i:端口号
方法二:netstat -tunlp|grep 端口号

若想再根据进程号查应用名称:

ps -ef| grep 进程号

2.后台运行

  nohup : 不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行。
  & :是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。
那么,我们可以巧妙的吧他们结合起来用就是

nohup COMMAND &

实例

sh test.sh &  

  将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止,标准输出和标准错误信息会丢失(缺少的日志的输出)

nohup sh test.sh  

  将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

nohup sh test.sh  & 

  将sh test.sh任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

3.杀掉指定进程

1.使用htop查看进程pid
2.kill -9 进程pid

杀掉名称含某个关键字的所有进程

ps -ef|grep 关键字|grep -v grep|cut -c 9-15|xargs kill -9

运行这条命令将会杀掉所有含有指定关键字的进程
下面将这条命令作一下简单说明:

管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
"ps -ef" 是linux里查看所有进程的命令。这时检索出的进程将作为下一条命令"grep 关键字"的输入。
"grep 关键字" 的输出结果是所有含有该关键字的进程。
"grep -v grep" 是在列出的进程中去除含有关键字"grep"的进程。
"cut -c 9-15" 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
"xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。

kill和kill -9的区别
  两个命令在linux中都有杀死进程的效果,执行kill命令,系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,有以下几种情况:
  (1)程序立刻停止
  (2)当程序释放相应资源后再停止
  (3)程序可能仍然继续运行
  大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止,但是如果程序正在等待IO,可能就不会立马做出响应。而kill -9命令则表示无条件的杀死进程,不管这个进程正在执行还是已经结束。

4.进程置于前后台

$ jobs      //查看任务,返回任务编号n和进程号
$ bg  %n   //将编号为n的任务转后台运行
$ fg  %n   //将编号为n的任务转前台运行
$ ctrl+z    //挂起当前任务
$ ctrl+c    //结束当前任务
$ test.sh &  //在后台运行test.sh,但当用户退出(挂起)的时候,命令自动也跟着退出。

七、实用命令和工具

1.排序工具

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]

参数说明:

-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-u 意味着是唯一的(unique),输出的结果是去重的。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息。
[-k field1[,field2]] 按指定的列进行排序。

实例
在使用 sort 命令以默认的式对文件的行进行排序,使用的命令如下:

sort testfile 

sort 命令将以默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出。

使用 cat 命令显示 testfile 文件可知其原有的排序如下:

$ cat testfile      # testfile文件原有排序  
test 30  
Hello 95  
Linux 85 

使用 sort 命令重排后的结果如下:

$ sort testfile # 重排结果  
Hello 95  
Linux 85  
test 30 

使用 -k 参数设置对第二列的值进行重排,结果如下:

$ sort testfile -k 2
test 30  
Linux 85 
Hello 95  

2.转换工具

   FFmpeg 是一组库和可执行文件的工具包,用此工具能够实现几乎任何格式文件间的相互转换。FFmpeg 的功能非常丰富,可以通过它设置视频的帧速率,并可以向其中添加字幕、更改纵横比、改变音频、以及更多的控制等。

例如:把 AVI 格式转为 mp4 格式的视频文件

ffmpeg -i video.avi video.mp4

3.uniq工具

  uniq工具作用效果为消除相邻的重复行,如果重复行不在相邻位置则不会消除。因此uniq一般与sort工具一起使用,作用效果与sort工具的-u选项类似。
语法

uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

参数:

-c或--count 在每列旁边显示该行重复出现的次数。
-d或--repeated 仅显示重复出现的行列。
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-u或--unique 仅显示出一次的行列。
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
--help 显示帮助。
--version 显示版本信息。
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

实例
文件testfile中的原有内容为:

$ cat testfile      #原有内容  
test 30  
test 30  
test 30  
Hello 95  
Hello 95  
Hello 95  
Hello 95  
Linux 85  
Linux 85 

使用uniq 命令删除重复的行后,有如下输出结果:

$ uniq testfile     #删除重复行后的内容  
test 30  
Hello 95  
Linux 85 

检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数。使用如下命令:

uniq -c testfile 

结果输出如下:

$ uniq -c testfile      #删除重复行后的内容  
3 test 30             #前面的数字的意义为该行共出现了3次  
4 Hello 95            #前面的数字的意义为该行共出现了4次  
2 Linux 85            #前面的数字的意义为该行共出现了2次 当重复的行并不相邻时,uniq 命令是不起作用的,即若文件内容为以下时,uniq 命令不起作用:
$ cat testfile1      # 原有内容 
test 30  
Hello 95  
Linux 85 
test 30  
Hello 95  
Linux 85 
test 30  
Hello 95  
Linux 85 

这时我们就可以使用 sort:

$ sort  testfile1 | uniq
Hello 95  
Linux 85 
test 30

统计各行在文件中出现的次数:

$ sort testfile1 | uniq -c
   3 Hello 95  
   3 Linux 85 
   3 test 30

在文件中找出重复的行:

$ sort testfile1 | uniq -d
Hello 95  
Linux 85 
test 30  

4.上传/下载工具

需要安装lrzsz工具:

yum install -y lrzsz

上传:rz ,弹框后选择文件
下载:sz 文件名

5.Paste工具

Linux paste 命令用于合并文件的列。paste 指令会把每个文件以列对列的方式,一列列地加以合并。

语法

paste [-s][-d <间隔字符>][--help][--version][文件...]

参数:

-d<间隔字符>或--delimiters=<间隔字符>  用指定的间隔字符取代跳格字符。
-s或--serial  串列进行而非平行处理。
--help  在线帮助。
--version  显示帮助信息。
[文件…] 指定操作的文件路径

实例
使用paste指令将文件"file"、“testfile”、"testfile1"进行合并,输入如下命令:

paste file testfile testfile1 #合并指定文件的内容 

使用"cat"指令对3个文件内容进行查看,显示如下所示:

$ cat file                  #file文件的内容  
xiongdan 200  
lihaihui 233  
lymlrl 231  
$ cat testfile              #testfile文件的内容  
liangyuanm  ss  
$ cat testfile1             #testfile1文件的内容  
huanggai 56  
zhixi 73 

当合并指令"$ paste file testfile testfile1"执行后,程序界面中将显示合并后的文件内容,如下所示:

xiongdan 200  
lihaihui 233  
lymlrl 231  
liangyuanm  ss  
huanggai 56  
zhixi 73  

  若使用paste指令的参数"-s",则可以将一个文件中的多行数据合并为一行进行显示。例如,将文件"file"中的3行数据合并为一行数据进行显示,输入如下命令

$ paste -s file             #合并指定文件的多行数据

上面的命令执行后,显示的数据内容如下所示:

xiongdan 200 lihaihui 233 lymlrl 231 

注意:参数"-s"只是将testfile文件的内容调整显示方式,并不会改变原文件的内容格式。

6.Xargs工具

  xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
  xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
  xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
  xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
  xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
  之所以能用到这个命令,是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

xargs 一般是和管道一起使用。
命令格式:

somecommand |xargs -item  command

实例
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

7.算数计算工具expr

  expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

语法

expr 表达式

表达式说明:
用空格隔开每个项;
用反斜杠 \ 放在 shell 特定的字符前面;
对包含空格和其他特殊字符的字符串要用引号括起来

实例
1、计算字串长度

expr length “this is a test”
 14

2、抓取字符串

expr substr “this is a test” 3 5
is is

3、抓取第一个字符数字串出现的位置

expr index "sarasara"  a
 2

4、整数运算

 expr 14 % 9
 5
 expr 10 + 10
 20
 expr 1000 + 900
 1900
 expr 30 / 3 / 2
 5
 expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
 90
 expr 30 * 3
 expr: Syntax error

八、Awk|Sed

  AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法

awk [选项参数] 'script' var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

选项参数说明:

-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。

基本用法
log.txt文本内容如下:

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

用法一:

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

实例:

# 每行按空格或TAB分割,输出文本中的1、4项
 $ awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo

 # 格式化输出
 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
 ---------------------------------------------
 2        a
 3        like
 This's
 10       orange,apple,mongo

用法二:

awk -F  #-F相当于内置变量FS, 指定分割字符

实例:

# 使用","分割
 $  awk -F, '{print $1,$2}'   log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 # 或者使用内建变量
 $ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
 $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
 ---------------------------------------------
 2 this test
 3 Are awk
 This's a
 10 There apple

用法三:

awk -v  # 设置变量

实例:

 $ awk -va=1 '{print $1,$1+a}' log.txt
 ---------------------------------------------
 2 3
 3 4
 This's 1
 10 11
 $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
 ---------------------------------------------
 2 3 2s
 3 4 3s
 This's 1 This'ss
 10 11 10s

用法四:

awk -f {awk脚本} {文件名}

实例:

 $ awk -f cal.awk log.txt
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值