Linux编程——linux命令、vi编辑器使用

第一部分:linux初学者编程入门1.1 chmod命令  这个命令是用于改变三种角色对文件的使用权限的,具体含义是:  三种角色:user(文件或文件夹的所有者)、group(user所在的群组)、others(用户群组以外的其他用户)  文件使用权限:read(有读权限),write(有写权限),executable(有执行权限),这三种权限分别有对应权限值1,2,4(刚好等比数列)。  每一种角色都有上述三种权限位,三种权限位的和值就代表了这种角色有何种权限。这三种权限位的和值有如下几种值:  1,2,3,4,5,6,7即(1~7)chmod命令的使用语法是:chmod 权限和值 文件名比如说在用户hadoop的某个文件夹下有名为tangbao.sh的文件,现在执行如下命令:chmod 765 tangbao.sh,分析如下:7,6,5分别代表user(即hadoop),group(hadoop所在的群组),others(group群组包含的用户以外的用户)所具有的权限位和值。7只能是1,2,4相加(权限位的基准值只有1,2,4三个),也就是user具有读、写、执行的权限6只能是2,4相加,也就是除了user以外的其他group用户有写、执行权限5只能是1,4相加,也就是group以外的其他用户有读和执行权限 Linux shell脚本语言和其他语言的区别  对大部分语言来说,需要作者实现全部功能,linux shell脚本语言相当于站在“巨人”的肩膀上,有很多实用的程序已经在linux系统中实现了,编写linux程序时候只需要调用这些程序,当然写程序之前你还是需要规划好你的产品代表的功能。  找到实用的程序后,先搞清楚它的功能,再将它加入到自己的程序中。编程者只需要像组装零件一样,最终组装成一个变形金刚~~Linux shell程序的执行周期  对使用windows操作系统作为底层平台的程序来说,一般会有exe后缀名(有没有其实都一样,只是一种文件的分类标致而已)。这个后缀标致代表的意思是:该程序已经转换成了机器码(0 1表示),可以立即执行。  对linux shell程序来说过程是这样的:首先程序进行编译(将程序翻译成机器码),并且是每次只读一行,然后翻译成机器码,接着就执行一行,然后再返回程序,重复上述过程,这样会影响程序执行效率。  总的来说是:读取一行,翻译一行,执行一行  一般来说,单任务处理系统,一个程序只要一运行就会接管对计算机的控制,决定屏幕输出什么内容以及什么。linux是多任务处理,多个任务可以通过分时机制实现多任务运行。  以功能与用户界面的设计、规划来驱动后台子程序的编写  要完成一个大的主题(功能),它里面会有很多小的功能。就是说对于一个很大的框架来说,我们可以设计、规划成比较小的框架,一个个实现,用户界面与它后台实际运行的子程序是相对应的。规划好整体架构和用户界面后,一步步实现小的功能,然后搭建出整体。  第三章 编写第一个linux程序  编写程序的几个术语:  命令、指令:同一个意思,一般来说,这些指令、命令都是一些实用的程序,在系统的环境变量中可以找到这些指令的位置,执行这些命令、指令可以得到相应的结果,这些都是计算机的一部分。  代码:多个命令指令及编写语句的集合。  程序:为完成一项任务的代码。——这个定义太笼统了,等于没有定义。   shell也和C、java一样是一种编程语言。有自己的关键字、语法,通过关键字的组合编写出实用的语句,就像我们使用自己的母语一样,以正确的方式发送给计算机,计算机就能懂。每一种语言都有自己的关键字,英语、中文都一样,计算机也有,关键字也称为保留字,在编写程序时,对于用户自定义的部分如变量、函数名等等都不允许使用。  条件句:if,else,elif,then  循环句:while,for in,continue  分支句:case  其他:let,read,echo,clear选择一种shell  shell是一类shell的统称,包括很多种,如C shell,bash,Korn shell等,不同shell代表不同的编程环境。通常shell程序是在/bin目录下。启动这三种shell分别命令是  C shell:csh  bash:bash  Korn shell:ksh  在/bin目录下可以看到常用的命令  这里选用bash 即Borne Again shell使用vi编辑器编写程序vi有如下几种模式(状态):命令模式:可以用户可以查看文本(程序),无法向其中输入内容,输入vi命令后回车就进入命令模式,在其他模式下按ESC键也可以返回命令模式。ESC即escape (character):逃跑标识,即退出插入模式:可以向文本中输入新的内容,按许多字母键都可以进入此模式,如a,i(大部分shell都支持的),SUSE操作系统按s,q也可以进入此状态最后行模式:按冒号:键可以进入最后行模式,用户可以搜索内容、保存文件、退出vi等。vi编辑器常用命令对应的功能如下:1、  模式切换i(小写):从命令模式切换到插入模式,插入的东西在当前光标之前a(小写):从命令模式切换到插入模式,插入的东西在当前光标之后:(冒号):从命令模式切换到最后行模式Esc:从插入模式切换到命令模式依靠上述几种命令,可以实现几种模式的相互切换2、  移动光标(下面命令针对的对象都是光标并且是在命令模式下实现的)光标移动是文本编辑必不可少的部分,在使用如下命令之前可以试试方向键,因为不少工具是支持方向键光标的移动的,还有Page Up和Page Down键支持翻页,这四种如果支持,那足以实现光标移动,无须在看下面的命令。h,j,k,l四个键是对应方向键的,可以实现上下移动。不用死记四个键代表往哪个方向移动,尝试一下就可以知道了。h:光标左移一个字符j:光标下移一行k:光标上移一行l:光标右移一个字符+:光标移动至下一行行首-:光标移动至上一行行首0:光标移动到本行行首$:光标移动到本行行尾3、翻页(命令模式下)Ctrl +F:向前翻一页 F:forwardCtrl+B:向后翻一页 B:backward对文本的操作命令(命令模式下):一般来说对文本无非有增删改查复制粘贴以及对操作的是否取消4、查找文本:/需要查找的字符名称:查找字符/:查找上一次查找的内容,?:查找上一次查找的内容,并且是向行首查找:n:最后行模式,n代表行号,表示切换到第n行,如果n为0表示是首行,如果是美元符号$表示的是文件的最后一行5、添加字符:i:插入光标前(insert)I(大写i):插入本行行首a:插入光标后(add)A:插入本行行尾6、拷贝和粘贴文本yy:拷贝当前光标所在行到缓冲区p:paste即粘贴,将缓冲区内容粘贴至当前光标后,注意粘贴时候:缓冲区只保留最后一次yy内容所以粘贴时候也是最后一次yy的内容。7、删除字符dd:删除光标所在行5dd:删除包含当前行开始的向后5行内容(注意:当前行也算作被删除的一行)x:删除光标所在处的字符X:删除光标左边的字符8、取消操作u:取消最后一次修改U:取消当前行的所做的所有修改是否保存文件及退出vi编辑器(注意字母前面的冒号:)ZZ:退出vi并保存所有修改下面的是最后行模式的,因为有冒号::wq!(包含wq前面的冒号:):强制退出,并保存所有修改:w:保存所做修改,不退出vi:q:退出vi:q!:退出vi,不保存修改编写一个菜单显示程序主要使用echoecho 后面带的字符串,通java一样,也是需要用双引号括起第四章 变量程序通常与数据的关系如下:1、  程序从键盘或者文件获得数据2、  程序处理数据3、  把数据显示在屏幕上或存储在文件中变量的分类:局部变量:由程序员建立,仅供程序自身用环境变量:由程序员建立,供所有人使用变量类型:shell中使用两种数据类型:数值型和字符串型变量命名规则:字母,数字,下划线组成,并且开头必须是字母,变量中间不能有空格。创建变量:使用关键字declare或export放置变量:在程序任何一处声明变量都是可以的,但是并不鼓励这么干,因为这样会使程序的可读性变低,不知道从哪里冒出一个变量。可以把变量集中放置一个程序文件的开始,这样方便看。同时声明多个变量declare length  width变量之间用空格隔开。变量赋值使用语法let 变量名=变量值使用let关键字 让的意思 让某个变量值是XXX注意:shell中赋值时候等号=两边的变量名和变量值之间没有空格,这与java是不同的,如果写了空格会报错的字符串变量需要使用declare或者export来声明,但是let只能声明数值型变量值可以是字符串,字符串必须像java一样带上双引号引用变量时候需要带上美元符号$将一个变量值赋给另外一个变量declare name =“hola”declare name2 = “$name”//注意使用了双引号,还有美元符号$数值型变量也可以复制let length=10let width=$lengthlet high=”$length-$width”注意双引号要加上。备注:也可以不用let关键字声明变量,直接用变量=变量值的方式定义,这样更加简单,系统会自动识别变量的类型进行存储。第五章 与用户交互使用read关键字read作用是使计算机等待用户将输入的内容存储在缓冲区,然后读取这些东西放在声明的变量中,程序运行时候,输入完数据需要使用enter回车键输入。如:read response 就是讲用户输入的内容,放在response中#!/bin/bash表示在所有命令执行前,启动bash文件输出的重定向通常情况下数据信息输出时候输出的位置都是在终端上显示,但也有很多时候并不需要把信息输出到终端位置,而是输出到文件中。把数据输出到文件的过程称为输出重定向(redirection),也就是改变数据输出流向。重定向使用运算符>大于符号>文件名使用时候注意:1、  如果文件名对应的文件不存在,那么系统将重新创建一个新文件,并将数据存储在新文件中2、  如果文件名对应的文件已经存在,那么输出的内容将覆盖掉原有的内容。3、  如果使用echo “内容”>文件名,那么echo后的内容在屏幕上将不再显示,而只是存储在文件名对应的文件中4、  如果要向文件中添加数据,而不是覆盖数据,使用关键字>>,这个运算符将数据添加到文件末尾,而不是覆盖原有的数据文件。并且是换到新一行来添加的。cat命令cat是读取文件的意思,cat 文件名能够显示文件的内容。如果没有改文件,cat 文件会报错,报文件不存在,与vi不同,如果文件不存在,那么会自动新建一个文件。第六章 linux 运算符本章介绍的运算符有如下几种:算术运算符:即加减乘除外加求余运算符%逻辑运算符:或且非/或与非比较运算符:另外介绍运算符的优先级算术运算符:求余运算符就是计算两个数相除后的余数(整除部分另外多出来的部分)注意赋值时候:let high=”$length-$width”注意双引号要加上。注意:shell中赋值时候等号=两边的变量名和变量值之间没有空格,这与java是不同的,如果写了空格会报错的逻辑运算符:! 非,进行非判断,如果a=300是真,则a!=300是假&& 与两个都为真,则为真|| 或:有一个真即可比较运算符能够比较两个数值或者字符串-eq  equals 等于-ne   not equals 不等于-gt    greater than 大于-ge  greater equals 大于等于-lt     less than 小于-le  小于等于使用test命令进行比较test $a 比较运算符 $b如果比较结果是符合逻辑的,那么返回一个真值,如果不符合,则返回一个假值。注意:实际比较值和具体的环境有关,有的符合逻辑返回的是0,不符合的返回是1


Linux 编程——三种流程控制语句(顺序语句、分支语句、循环语句)

第三部分 linux控制语句

  控制语句就是控制语句往哪走怎么走,linux控制语句与其他语言一样有三种:条件语句,分支语句和循环语句,这三种语句也反应了现实中的逻辑。

第七章 条件语句

if,if else,if elif语句

上述都用fi结束

条件语句:先进行逻辑条件判断,再决定程序执行哪一种情况

表示逻辑条件有如下方式:

1、  单一变量

2、  表达式

每一个if(包括elif)后面都要有一个then,并且最后以fi结束

if语句使用语法
if [condition]

  then

      instruction

fi

if…else 语句使用语法

if [condition]

 then

   instruction

else

   instruction

fi

if …elif语句使用语法

if [condition1]

  then

      instruction1

elif[condition2]

  then

      instruction2

fi

 

上述三种if语句的使用区别:

处理能力

A:if…then…fi处理能力最末

B:if…then…else…fi处理能力次之

C:if…then …elif...then…elif…then…elif…then fi的处理能力最强

说明:

A只能处理一种情况,如果条件满足,就处理,如果不满足,不做任何处理,就是不输出别的信息到屏幕或文件,因为C只有一种分支。

B只能处理两种情况,一种是if后面的,一种是除了if以外的所有情况,也就是if条件的补集对应的情况都用else表示了

C的处理和java中的switch语句是一样的,假设一个问题有10种情况,那么第一个if代表一种情况,其他的9个elif,每一个elif代表一种情况,共计9种

#!/bin/bash

echo "Input your mark"

read mark

if [ $mark -gt 90 ]

   then

        echo "Talent"

fi

 

#!/bin/bash

echo "Input your mark"

read mark

if [ $mark -gt 90 ]

   then

        echo "Talent"

else

        echo "failed"

fi

 

#!/bin/bash

echo "Input your mark [0,100]:"

read mark

if [ $mark -ge 0 ] && [ $mark -lt 60 ]

   then

        echo "You'd better prepare to review your lesson for makeup"

elif [ $mark -eq 60 ]

   then

        echo "one more is waste,one less is hard,60 is your god"

elif [ $mark -gt 60 ] && [ $mark -lt 70 ]

   then

        echo "Qualified and Eligible"

elif [ $mark -ge 70 ] && [ $mark -lt 80 ]

   then

        echo "Nice"

elif [ $mark -ge 80 ] && [ $mark -lt 90 ]

   then

        echo "Excelent"

elif [ $mark -ge 90 ] && [ $mark -le 100 ]

   then

        echo "Talent"

elif [ $mark -lt 0 ]

   then

        echo "Input the right format mark"

fi

 

第八章  case语句

本章包括

1、使用case语句

2、使程序至少程序一条case语句

3、case语句在用户界面中的作用

前面已经知道if条件句的三种情况,已经说明了C的处理和case是等价的。由于C可读性较差,用case则显得清晰的多。介绍case语句。

case的使用语法

case $变量名 in

变量值1)

         处理语句(不包含分号)

;;

变量值2)

         处理语句(不包含分号)

;;

….

*)

         处理语句(不含分号)

//没有分号

esac

说明:

1、变量值就是变量名能取到的所有条件,变量值可以是一个单值,也可以是一个区间

每一个逻辑分支的处理语句不包含分号,但是逻辑分支下面包含两个分号

2、最后以esac结束,作为结束关键词。

3、case后面的变量名带有in关键字,表示变量名在如下的变量值中

4、变量值后面跟一个小括号).

5、无论什么时候引用某个变量,必须加上美元符号$

6、如果不能匹配所列的值,使用通配符*放在变量值的最后位置,加上一个),然后方式处理语句,注意通配符*)的处理语句下面是没有两个分号的。切记*是通配所有情况的,如果把*)放在第一个逻辑分支,那么它将会覆盖后面的所有分支,也就是说此时的case语句相当于只有一个逻辑分支,这个逻辑分支是*)的,它已经覆盖了后面的所有逻辑分支。

case语句在用户界面的作用

由于linux shell与用户的交互并不是像windows那样有个图形界面的对话框,而是使用一种字符菜单形式与用户交互,因此,每一种情况可以用case来处理。

将菜单与case的分支进行对应就可以建立linux程序的菜单处理。

 

第九章 语句的嵌套

在上述提到的if及case语句中,每一个instruction都可以用一个更小的if及case程序模块来代替,这种情况就是语句的嵌套。

 

第十章 linux循环控制语句

while循环使用语法

while(condition)

         do

                   instruction

done

注意:这个循环的的终结词是用done,而且多了do,这些与C的循环是有区别的。

可以将循环用于菜单、计时循环的设计

死循环:while循环条件永远为真,程序永不停止(程序执行外在环境没有受影响的条件下)的执行循环体,永远不会停止执行,这种循环称为死循环。

for in循环

使用语法:

for 变量名 in 取值列表

do  

         instruction

done

注意这里的变量名不需要加上双引号,取值列表用空格隔开

这个循环的含义是:变量名取取值列表中的每一个值后,然后执行循环体,取值列表有100个值,则执行循环列表一百次。

例如

#!/bin/bash

for name in hola hello bonjour

    do

        echo "Buenas noches,$name !"

done

 

Buenas noches,hola !

Buenas noches,hello !

Buenas noches,bonjour !

这里面name取了取值列表的每一个值,然后执行循环体

变量值表也称为单词表,如果变量值中含有空格符合,需用双引号括起来,变量值之间仍然用空格隔开,变量值中没有双引号的不需要用双引号,有双引号的单词和没有双引号的单词可以放在一起。

#!/bin/bash

#declare name="hola"

for name in "hola holala" hello bonjour

    do

        echo "Buenas noches,$name !"

done

 

第十二章 循环嵌套和快速退出

嵌套循环,一个循环内部包含别的循环,换种说法也就是一个循环外还有循环,循环是多层的。

写循环嵌套时候,必须注意的是while和for in两种循环do 和done都是配套的。

中止循环

break循环用于跳出一个循环设计的所有次循环,continue用于跳出一次循环,通常continue放的位置并非循环体的最后位置,这样跳出这次循环后就不用执行continue语句后的其他语句。

注意使用赋值语句:

let a = “$a + 1”,这里面左边的变量没有美元符号,右边有,右边的双引号可以有,也可以没有

while循环条件中括号与变量要隔开,引用变量时候可以用双引号也可以不用,但是需要用美元符号,for in循环中,变量不需要美元符号。

 

第五部分:子程序

一段功能单一的函数可以成为子程序,一个代码文件里面通常可以包含几个函数,但是只有一个主函数,也就是一个主函数和其他几个附属函数构成一个相对完善的功能。

函数:

函数的定义语法:

使用关键字

function  函数名

{

语句

}

注意:1、shell里面的大括号放的位置不像java里面放的那样,第一个大括号紧靠在函数名外面,必须另起一行开始放。

2、只有一个函数而不调用函数,即:不在某一行中写改函数名,是不执行定义的函数里面的语句的。如#!/bin/bash

clear

function hola

{

echo "hello world"

}

hola

如果没有加粗的hola函数调用,虽然定义了hola函数,但是是不执行的。调用才执行。

函数的传参:

位置参数:在shell语言中,使用$1表示第一个参数,$2表示第二个参数,以此类推,$0表示程序名称。$表示变量的引用,不能用其他字符如val等类似变量名称的字符来代替这些数字,这与java是有不同的。

#!/bin/bash

clear

function verify

{

if [ $1 -eq 747787 ]&&[ $2 -eq 1234 ]

   then

        echo "Verified"

   else

        echo "Not Verified"

fi

}

echo "Input your name"

read name

echo "Input your password"

read password

verify $name $password

 

符号$#表示的意思是传递的参数个数,可以用参数个数校验的方法来确定是否去调用某个函数

 

函数的共用

函数的共用就是把一个函数变成一个公共的函数,这样大家都能调用,使用关键字export

语法:export 函数名

 

函数的返回值:使用return关键词 return 可以设定返回一个数表示一段程序执行的结果,这个数是0——256,不能返回字符串。通常用返回0表示返回正常,返回非0表示返回错误的结果。返回的结果存放在变量$?中,可以用于case语句的处理。

 

第六部分  数据文件程序的设计与打印

两个符号:

1.>   重定向符号,这个符号前面已经说了,就是讲信息写入重定向符号右边的文件中,覆盖原文件信息内容。

2.>> 也是重定向符号,它是添加到文件末尾的符号,并不覆盖。

利用gawk查找文件中的信息

搜索语法

gawk ‘/ABC/{print $1,$2….$N}‘ 文件名

注意:

1.ABC是表示要搜索的内容,用两个正斜杠/包着

2.文件名表示要在其中搜索的文件,需要与最后一个单引号隔开

3.总的来说这个搜索表达式包括三个部分 gawk  正则表达式 文件名,正则表达式用单引号包着,与其他两个部分隔开。

这个搜索表达式默认是首列进行匹配的,也可以进行指定列的匹配

 

gawk  ‘$N~/^123*/{print $1,$2….$n}’ 文件名

$N表示对指定的列进行匹配,~表示匹配一个搜索表达式,如果是!~表示不匹配一个搜索表达式,找出不等于搜索表达式的记录。^表示进行一个列的开头进行匹配,*是通配符。

上述搜索命令右方加上>可以讲搜索到的内容重定向到一个文件中。这样就可以搜索到想要的,把不想要的过滤掉,也就相当于删除了不想要的内容。

 

打印内容:

lp命令,利用lp命令可以调用打印程序,将内容送到已经安装好的打印机中,进行打印

 

cat abc | lp,其中|是管道符号

 

管道符号与重定向符号的区别:

管道符号|与重定向符号>或>>区别是管道符号两边都是命令,它的本质是将一个命令的输出当作另一个命令的输入,而重定向符号左边是命令的输出,右边是文件,也就是输出的最终地址。

现在有这样的问题:搜索满足某个条件的信息,然后打印。可以这样做使用gawk来搜索,然后利用管道命令,将输出结果输送到打印机,即lp命令,也就是:

gawk 正则表达式 文件名 | lp

这样写有一个问题,就是每搜索一个结果就送到打印机,这样就需要反复执行gawk命令,这样做效率很低。可以先把搜索结果放在一个文件中,然后将整个文件送去打印。

gawk 正则表达式 文件名>新文件名

cat 新文件名|lp

这样会提高效率。

 

 

注释:注释用于解释一个程序的目的或者某一个函数的用途,对于函数的注释无须多说,对于一个程序文件的注释,通常放在程序的开头,并且一个程序的注释至少包含如下7个部分。

#程序名称(就是程序文件的名称)

#程序的功能

#程序员的名称

#使用程序的潜在用户

#程序的设计日期

#程序最后一次修改日期

#最后一位修改的程序员名字

例如:

#Title:ForInDemo

#Purpose:a demo to show how to use for in sentence

#Programer:Jack Ren

#Primary User:programer

#Originally Written:13/04/13

#Last Changed:13/04/13

#Changed by:Jack Ren

注释使用#符号,也可以把这个#放在一个语句的开头,使语句失效

 

 

第8部分 email程序设计

使用linux email邮件

每一台linux机器上都有一个linux账号,账号与主机名组合就是该email的账号。

比如说linux机器名是Landau,有一个linux账号是qq,那么该主机上的邮件账号是qq@Landau。

Linux email的邮件程序是mail

使用语法:mail 邮件地址 < 发送的内容文件

可以携带参数

-s  表示邮件的主题     mail –s “关于神经网络系统的设计” qq@Landau < neutralnetsystemdesign.txt

 

-c   表示明抄送,就是大家都可以看到的抄送地址 如果不带这个参数,发送给多个人时候,需要将邮件地址以空格隔开。 mail –c qq@Landau bob@Landau < 发送的内容文件,不带-c,所有人都在目的地址中,带-c,-c后面的人在抄送列表中,邮件的收件人可以看到所有的地址。

-b  表示密送,密送地址可以看到所有明送的抄送地址,但是看不到其他密送的地址。

mail –b qq@Landau < 发送的内容文件

 

三个参数可以同时使用,参数的作用范围,如果参数不冲突,则一直到邮件地址结束,如果有冲突,则到下一个参数开始前为止

 

Mail –s “你好” –c qq@Landau –b bob@Landau < nihao.txt

 

一个统计写的程序有多少行的程序代码

cat * >abc.txt

:set nu

就可以看到代码多少行了

 

一些有用的linux shell程序

spell 拼写检查程序,能够对作用的文本内容进行检查

比如spell abc.txt,如果abc.txt中有错误的单词,将检查出来

spell的作用原理是将文本的单词与linux字典中的文件进行比较,如果字典中没有这个单词,那么就会显示出来,这其实是个缺陷,因为像地方名称、名字这些东西很可能不在linux字典文件中。

排序:sort

使用语法:sort abc.txt

sort默认的排序是升序。并且小写在大写前面,几个参数

-r reduce 表示降序

-f 表示忽略大小写

-n number 按照首字母数字排序

-m month 按照月份排序

比较文件差异:diff

diff file1 file2

hadoop@sdp15:~> diff hello.txt hello.sh

1,5c1,6

< 2Hello

< 1hola

< 4hello

< hello123

< hello1234

---

> #!/bin/bash

> clear

> echo"Welcome to my first linux program"

> echo"Enter your first name"

> read response

> echo "Hello

其中<表示只在file1中有的,>表示只在file2中有的,没有显示的表示是共同有的。

 

比较程序cmp

这个程序会比较每一个字符,与diff都是比较,但是比较的比较细致。

 

对大型文件的修改:sed程序

 

一般的文件编辑器工作是这样的,它将整个文件读入到系统的缓冲区,然后进行操作,如果文件太大,那么整个缓冲区将没法装下这个文件,也就无法继续操作。sed的工作原理不同,每次只读入一行数据,然后保存文件到一个后缀名为.tmp(其实任何一种后缀名都是可以的,后缀名其实没啥用,有没有都一样的,只是一种类型标识而已)中,而不是原文件中。这样可以先用sed修改文件,然后保存到原文件.tmp中,最后用mv命令修改原文件.tmp为原文件名称即可(会自动替换原文件的)

语法:

sed 正则表达式 原始文件 > 一个tmp文件中

重命名tmp文件

 

拆分大型文件split

语法:split –n filename

-n代表每一个文件行数,最后一个文件可能没有这么多行,就相当于一个除法一样,最后一个文件如果不是-n行数,就以余数行数为内容。拆开后的小文件以xaa,xab,xac。。。类推命名。split一个文件后,原文件依然存在而不被删除。

查找文件中的字符

grep命令

使用语法:grep 查找的内容 文件名

如果不确定在哪个文件,可以使用*进行通配

 

ftp命令 远程登录

使用语法:ftp  IP地址

输入后提示用户输入账号和密码,正确后就可以登录

注意:ftp支持的linux命令并不是和linux本机完全一致的,比如说ll在suse linux中可以用,但是在ftp模式下,用ll是无效的,可以用ls。

用ftp获取文件

ftp> get 文件名

获取的文件在当前本机的目录下

传递文件到对方机器上

使用命令

ftp>put 文件名

这时候文件就被传送到对方机器当前目录下

断开链接:直接输入bye即ftp>bye 即可

 

剪切 文件中的列

使用命令cut

cut –f 1,2(1,2表示列) 作用的文件名 > 剪切的列放置到新的文件中,如果不用重定向符号>此时会将剪切的在屏幕中显示

注意:linux命令是通过一个tab键来确定两个字符串之间是否是列的关系,如果两个字符串之间是一个空格,系统会认为是一列的。例如

Jim Green是一个field,而Jim      Green是两个fields

注意:每次启动一个程序时候都会启动一个shell

修改文件中的字符

命令tr

tr 正则表达式 <原始文件名>目的文件名

注意用了重定向符号

分类:  Linux

你可能感兴趣的:(Linux编程——linux命令、vi编辑器使用)