现实很残酷,除了努力还能咋滴!!!

今天主要介绍linux中两大文本编辑器的入门级用法:sed(stream editor)和awk;

在介绍sed和awk之前先简单介绍下正则表达式的元字符

正则表达式元字符

.匹配除\n以外的任何字符;

[^fgh]不与fgh之中的任意一个字符匹配;

\w 匹配大小写英文字符及数字0到9之间的任意一个及下划线;

\W 不匹配大小写英文字符及数字0到9之间的任意一个;

\s 匹配任何空白字符;

\S 匹配任何非空白字符;

\d 匹配任何0到9之间的单个数字;

\D 不匹配任何0到9之间的单个数字;

正则表达式限定符

上面的元字符都是针对单个字符匹配的,要想同时匹配多个字符的话,还需要借助限定符。下面是一些常见的限定符(下表中n和m都是表示整数)

*匹配0到多个元字符,相当于{0,}

?匹配0到1个元字符,相当于{0,1}

{n,}匹配至少n个元字符

{n,m}匹配n到m个元字符

+匹配至少1个元字符,相当于{1,}

\b匹配单词边界

^字符串必须以指定字符开始

$字符串必须以指定的字符结束

说明:由于在正则表达式中“\”、”?等字符已经具有某一特定意义,如果需要用它们的原始意义,则应该对它进行转义,例如希望在字符串中至少有一个“\”,那么正则表达式应该这么写:\\+.

可以将多个元字符或者原义文本字符用括号括起来形成一个分组,比如^(13)[4-9]\d{8}

$表示任意以13开头的移动手机号码。

另外对于中文字符的匹配时采用的unicode编码来匹配的,对于单个unicode字符,如\u4e00表示汉字“一”。

关于\b的用法,它代表单词的开始或者结尾,以字符串“123a 345b 456”作为示例字符串,如果正则表达式是“\b\d{3}\b”,则仅能匹配456.

可以使用“|“来表示或的关系。

Sed简介

sed有两块缓冲区:pattern space和hold space。Pattern space中存放待处理的目标文本,holdspace供程序员自己使用。

Sed处理流程

清空pattern space。(如果这是对该输入流的第一次读取,则也将hold space初始化为空)从输入流中读取一行,去除末尾的换行符,将其放入pattern space。

执行sed脚本。Sed脚本由一系列命令组成。因为sed是按行处理,所以sed命令的含义主要是“对于什么样的行,则进行什么样的处理。例如,”把第三行删除”,或者“如果这一行包含this,则把其中的this替换成that”.其中”包含什么样的行,由address指定,执行什么样的处理由sed命令序列表达。

脚本执行完毕,如果输入流中还有内容,转至1,开始下一轮处理。

所以学习sed,就是学习如何“指定需要处理的行”(address),以及学习我们能使用sed“进行什么样的操作”。

当编辑指令在命令行上执行时,其前必须加上选项-e。其命令格式如下:

Sed-e‘编辑指令1’–e ‘编辑指令2’…文件档

其中,所有编辑指令都紧接在选项-e之后,并置于两个“‘’”特殊字元间。另外,命令上编辑指令的执行时由左而右。

Sed –e ‘1,10d’–e ‘s/yellow/black/g’ye1.dat

解释:编辑指令执行删除1至10行资料;编辑指令将yellow字符串换成black字符串。

Sed的编辑指令

Sed编辑指令的格式如下:

[address1[,address2]]function[argument]

其中,位址参数address1、address2为行数或regular expression字串,表示所执行编辑的资料行;函数为sed的内定函数。

sed位置参数的表示法

实际上,位址参数只是将要编辑的资料行,用它们的行数或其中的字串来代替表示它们。下面举几个例子说明:

删除档案内的第10行资料,10d;

删除含有“man”字符串的资料行,/man/d;

删除第10到200行资料,10,200d

删除第10行到含man字串的行,10,/man/d

接下来以位址参数的内容与其个数两点,完整说明指令中位址参数的表示法。

位址参数的内容:

位址为十进位数字:此数字表示行数。当指令执行时,将对符合此行数的资料执行函数参数指示的编辑动作。

位址为regular expression:

当资料行中有符合regular expression 所表示的字串时,则执行函数参数指示的编辑动作。另外在regular expression前后必须加上“/”.例如指令为/t.*t/d,表示删除所有含两”t“的资料行。其中”.”表示任意字元;“*”表示其前字元可重任意此;

位址参数的个数:在指令中,当没有位址参数时,表示全部资料执行函数参数所指示的编辑动作;当只有一位址参数时,表示只有符合位址的资料行才编辑;当有两个位址参数,表示只有符合位址的资料行才编辑;当有两个位址参数,表示对资料区执行编辑。

下面举例子说明:

例如指令为

d表示删除档内所有资料行;

例如指令为5d 表示删除第5行资料;

1,/apple/d表示删除资料区,由档内第一行至内有apple的行;

/apple/,/orange/d表示删除资料区,由档内还有apple字串至含有orange字串的资料行。

Sed函数参数

:label建立script file内指令互相参考的位置。

#建立解

{}集合有相同位址参数的指令

!不执行函数参数

=印出资料行数

a添加使用者输入的资料

b label 将执行的指令跳转至由:建立的参考位址

c 以使用者输入的资料取代资料

d 删除资料

g 拷贝资料从hold space

n 读入下一笔资料

N添加下一笔资料到PATTERN SPACE

S 替换字串

t label 先执行以替换的编辑指令,如果替换成功,则将编辑质量跳至label处执行。

S参数

表示替换,其指令格式为:[address1[,address2]] s/pattern/replacemen/[flag]

Flag :主要用它来控制一些替换的情况:

当flag为g时,代表替换所有符合match的字串;

当flag为十进制位数字m时,代表替换行内第m个符号的字串;

当flag为p时,代表替换第一个符合pattern的字串后,将资料输出标准输出档案;

当flag为w file时,代表替换第一个符合pattern的字串后,输出到wfile档内;

如果没有flag则将资料内第一个符合pattern的字串以replacement字串来替换。

delimiter:可以随意替换定界符。

注意的是,sed都是按行处理,即使指定的是一个address range,比如:sed –e ‘3,7s/this/that/g’,s命令会被执行五次(从第三行到第七行每行执行一次)而不是只执行一次就将3到第7行的所有this换成that。可以使用sed的N命令或者其他命令读入多行文本到pattern space。

[root@localhost ~]# cat test

abc

def

1 2 345

end

int main () {

printf("hello\n");

return 0;

}

lastempty

去掉所有换行符:

方法一:

在vim里面,执行1,$s/\n//即可。这里使用sed的方法:读入一行,删除换行符,再读入一行,直到整个文件处理结束。实现如下:

[root@localhost ~]# sed-e :a -e "N;s/\n//;ba" test

abcdef1 2 345endint main () {printf("hello\n");return 0;}lastempty

命令解释:-e 参数用来添加执行命令。“:a”用来设置一个名字为a的label;sed中有两个跳转命令:b和t。b为无条件跳转,t为当上一个命令替换成功时跳转。)。"N;s/\n//;ba"用分号隔开了三条命令。在执行这些命令之前,pattern space中存放着一个输入行(其末尾的换行符已经去掉),N命令在pattern space后面追加一个换行符并从输入流中读入下一行。

此时pattern space中的内容就是输入流中的连续两行文本的拷贝,用S命令去掉换行符,然后再用b命令无条件跳转到label“:a”上继续处理后面的文本。

先说说sed,sed即stream editor。是一种非交互式上下文编辑器,它对源文件没有破坏性,查询中不改源文件(但可以实现此功能),sed通过限制条件对文本进行行读取,并将读取内容贮存在内存中,根据限制内容pattern(样式)将文本有选择性的输出。sed不仅仅能够根据pattern(样式)作为约束条件,它还支持脚本导入的约束条件,这样节省了客观的键入和随之而来的错误。

Sed命令列可分成编辑指令与文件档部分。其中,编辑指令负责控制所有的编辑工作;文件档表示处理的档案。

Sed的编辑指令均由位址与函数两部分组成。其中,在执行时,sed利用它的位址参数来决定编辑的对象;而用它的函数参数编辑。

下面来看看sed的简单语法:

sed [option] /pattern/commandfile

sed[option] adr1,adr2/command file

sed[option] script file

注意:在使用正则表达式时,一旦用到元字符,则这个正则表达式必须加引号。

Option:

-n 取消默认显示输出,使显示匹配内容。

-e 在一个sed语句中加入多个限制条件,每个均以-e开头

-f在-f选项后可直接跟一个脚本,sed就以此脚本导入限制条件

Pattern:支持正则表达式,与grep中的使用格式相同。

command:命令不支持像选项(option)那样可以组合使用,所以每条命令在每个语句中只能出现一次。

P:显示出所有信息,在设定显示条件的情况下匹配内容会多显示一次。

d:删除匹配内容所在的行。

a\:在指定行后添加一行或多行。

i\:在指定行添加一行或多行。(\后为添加内容)

s:查找替换(s/查找要替换的内容/新替换的字符串/i不区分大小写 g全局替换查找)

eg:

sed /关键字/ 文件目录

[root@localhost ~]# sed -n /unset/p /etc/bashrc

unset i

unset pathmunge

sed地址1,地址2文件目录#地址信息包括:行号、字符串和正则表达式

[root@localhost ~]# sed -n 2,5p /etc/inittab //显示2-5行的所有内容

#

# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

# System initialization is started by /etc/init/rcS.conf

[root@localhost ~]# sed -n /id/,/id/p /proc/cpuinfo

vendor_id: GenuineIntel

cpu family: 6

model: 42

model name: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz

stepping: 8

cpu MHz: 2095.300

cache size: 3072 KB

physical id: 0

core id: 0

cpu cores: 1

apicid: 0

initial apicid: 0

fpu: yes

fpu_exception: yes。

cpuid level: 13

从带有id字符串的第一行,显示到最后一行字符串id

sed '/^[[:space:]]*#/d' /etc/inittab

#删除显示内容中以0个或多个空白字符紧接#开头的行

Sed –e‘/^$/d’ 文件档案,删除文件内所有空白行。

sed经典示例

Sed 可以执行类似 UNIX 命令 grep 的功能。理论上 , 可用 regular expression(例如 , 将文件中含

有 "gamma" 字串的资料行输出。则其命令列如下:

sed -n -e '/gamma/p' 文件档

但是 , sed 是行编辑器 , 它的搜寻基本上是以一行为单位。因此 , 当一些字串因换行而被拆成两部份时 , 一般的方法

即不可行。此时 , 就必须以合两行的方式来搜寻这些资料。其情况如下面例子:

例. 将文件中含 "omega" 字串的资料输出。其命令列如下

sed -f gp.scr 文件档

gp.scr 档的内容如下 :

/omega/b

N

h

s/.*\n//

/omega/b

g

D

在上述 sed script, 因藉着函数参数 b 形成类似 C 语言中的 case statement 结构 , 使得 sed 可分别处理当

资料内含 "omega" 字串 ; 当 "omega" 字串被拆成两行 ; 以及资料内没有"omega" 字串的情况。接下来就依上述的三种情

况 , 将 sed script 分成下面三部份来讨论。

当资料内含 "omega" , 则执行编辑指令

/omega/b

它表示当资料内含 "omega" 字串时 , sed 不用再对它执行後面的指令 , 而直接将它输出。

当资料内没有"omega" , 则执行编辑指令如下

N

h

s/.*\n//

/omega/b

其中 , 函数参数 N, 它表示将下一行资料读入使得 pattern space 内含前後两行资料。函数参

数 h(参照 , 它表示将 pattern space 内的前後两行资料存入 hold space 。函数参数 s/.*\n// , 它

表示将 pattern space 内的前後两行资料合(解[11])成一行。/omega/b , 它表示如果合後的资料内含 "omega" 字

串 , 则不用再执行它之後的指令 , 而将此资料自动输出 ;

当合後的资料依旧不含 "omega" , 则执行编辑指令如下

g

D

其中 , 函数参数 g(参照[section4.21]) , 它表示将 hold space 内合前的两行资料放回 pattern space。函数参数

D(参照[section4.17]) , 它表示删除两行资料中的第一行资料 , 并让剩下的那行资料 , 重新执行 sed script。如此 ,

无论的资料行内或行间的字串才可搜寻完全。

Awk

Awk不仅是LINUX也是任何环境中现有功能最强大的数据处理引擎之一,它不仅支持简单的查找命令而且支持创建简短的程序,这些程序可以实现数据排序、处理数据、输入计算以及生成报表。与其说它是一款数据处理程序倒不如说它是一种用于文件的编程语言工具。

Awk的格式:awk的命令有模式pattern和操作action组成,模式pattern由两单引号之间的正则表达式和一个或多个awk操作符组成;操作action由括在大括号内的一条或多条语句组成,语句之间用分号隔开。注意pattern中的正则表达式两端必须加//,action的两端必须加{}。具体格式如下:

[root@localhost ~]# awk `pattern{action}` filename

Awk的格式输出:

Print命令

awk默认将整个文本以换行符分成若干个record,将每个record以空格分成了若干个filed。

每个filed 分别对应$1$2$3…$n,整个record即1..n的总和为$0.

并且用以下几个内置变量来定义:

FS:输入字段分隔符,默认为空格 (filter separator)

RS:输入行分隔符,默认为换行符

OFS:输出字段分隔符,默认为空格

ORS:输出行分隔符,默认为换行符

NF:当前记录中的字段数

NR:当前的行数

BEGIN 模式

BEGIN+操作块,awk必须在输入文件在进行任何处理之前执行BEGIN后的模块。

Eg:

[root@localhost]##分析:输入文件在未执行任何操作之前,将FS和OFS分别替换,然后输出被新分隔符分割的字段1和2

END模式

END+操作块,此模式不匹配任何输入行,而是执行任何与之关联的操作。即awk在处理完成输出前执行END+操作块。

[root@server55 ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2}END{print "show complet!"}' /etc/passwd

#在输出结果后加入字符串 show complete!

[root@localhost ~]# awk 'BEGIN{FS=":";OFS="-"}{print NR":"$1,$2}END{print "show complet!"}' /etc/passwd

1:root-x

2:bin-x

3:daemon-x

4:adm-x

5:lp-x

6:sync-x

7:shutdown

#此为print中加入NR的效果,显示了行号,并且还显示了额外字符串“:”,print变量和C语言中的相同输出变量时不需要加任何修饰符,输出文本内容时候,则需要加上“”双引号。

[root@server55 ~]# awk 'BEGIN{FS=":";OFS="-";RS=";"}{print NF,$1,$2}END{print "show complet!"}' /etc/passwd

223-root-x

Show complet!

#我将换行符换成了“;”所以整个文档视为一条record,此时再用NF显示filed的数目就显示为223;

下面介绍两个小的文本排序程序:sort和uniq

sort

Sort option filename

-u移除连续重复的行-r 反序排列

-n按数值大小排序

uniq

Uniq option filename 相同且连续的行只显示一次

-u 只输出没有重复的行,有相同的行则不予显示

-d只输出有重复的行

vi

下面介绍下VIm工具

Linux绝大多数文档都是以纯文本ASCII码的形式存在,而VIM就是一款处理纯文本数据的强大的编辑器。它在所有的UNIX系统中都存在;其具有程序编辑功能,对语法主动会以不同颜色的字体加以区分。

光标跳转:左h下j上k右l

撤销:u逐步撤销;U全部撤销

取消撤销:ctrl+r

.:重复上一动作。

进入可视化模式:v单词选中;V单行选中。

写一个脚本

1、判断一个指定的脚本是否有语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其它任何键可以通过vim打开这个指定的脚本;

2、如果用户通过VIM编辑后保存退出时仍然有错误,则重复第一步中的内容;否则,就正常关闭退出。

难点分析:echo $A |tr ‘A-Z’ ‘a-z’将大写字母转换为小写字母;

#!/bin/bash

# 判断脚本是否有语法错误

#任意输入一个脚本文件

bash-n$1&> /dev/null

#查看上一条命令的返回结果

C=$?

#判断目的脚本是否有错,无错为0

if[ $C-ne0 ]

then

read –p “There are something wrong with your script ,press Q/q to quit.press any key to edit:” A

AA=echo $A |tr ‘A-Z’ ‘a-z’

else

AA=’q’

fi

while [ “$AA” != “q” ];do

vim$1

bash –n $1&> /dev/null

D=$?

if[ “$D” –ne‘0’ ]

then

read –p “There are something wrong with your script ,press Q/q to quit.press any key to edit:” B

AA=echo $B |tr ‘A-Z’ ‘a-z’

else

AA=’q’

fi

done

写一个脚本:

1、要求用户从键盘输入一个用户名,判断此用户是否存在,如果存在,则返回此用户的默认shell;如果不存在,提示用户不存在。
2、判断完成以后不要退出脚本,而是继续提示N|n(next)用户输入其它用户名以做出下一个判断,而键入其它任意字符可以退出;
1 #!/bin/bash
2 #
3read -p "please input a user:" A #提示从键入待检测用户名
4id $A &> /dev/null#判断用户是否存在
5C=$?
6if [ "$C" = '0' ];then #如果存在则C值为零
7finger $A | awk '/Shell/{print $4}' 
#输出用户对应的shell
8else
9echo "No such user."#用户不存在则输出字符串
 10fi
11 read -p "press N/n to continue,any other key to quit:" B
#键入字母,选择是继续还是跳出程序
 12 BB=`echo $B | tr 'A-Z' 'a-z' `#转换大小写
 13 while [ "$BB" == 'n' ];do#只有变量的值是n时,在进入while循环
 14read -p "please input a user:" A #若进入while循环则从新提示输出用户名
 15id $A &> /dev/null
 16C=$?
 17if [ "$C" = '0' ];then#对新键入用户名进行判断
 18finger $A | awk '/Shell/{print $4}'
 19else
20echo "No such user."
 21fi
22 read -p "press N/n to continue,any other key to quit:" B
#循环结尾再次询问是否继续循环
 23 BB=`echo $B | tr 'A-Z' 'a-z' `
 24 done

写一个脚本:

1、向系统中添加20个用户,名字为linuxer1-linuxer20,密码分别为其用户名,要使用while循环;
2、要求:在添加每个用户之前事先判断用户是否存在,如果已经存在,则不再添加此用户;
3、添加完成后,显示linuxer1-linuxer20每个用户名及对应的UID号码和GID号码,形如
stu1, UID: 1000, GID: 1000
1 #!/bin/bash
2 #
3 let I=1#初始化变量I值为1
4 while [ "$I" -ne '21' ];do#设置循环范围
5id linuxer$I &> /dev/null#判断用户是否存在
6if [ "$?" -ne '0' ];then#如果不存在则创建
7useradd linuxer$I
8else#否则输出用户存在
9echo "user:linux$I already exited!"
 10fi
11 id linuxer$I | awk '{print $1,$2}'| sed "s/uid=\(.*\)(.*)/linuxer$I,UID:\1/g"|sed "s/(.*=/,GID:/g"
#使用awk、sed与通道的配合逐步的将id命令得到的内容层层替换成题目中要求的格式
 11 I=$[$I+1]#循环次数控制条件
 12 done

写一个脚本

写一个脚本:
1、扫描192.168.0网段内的主机的在线状态,但需要提示用户输入一段IP地址范围,方式是指定起始IP和结束IP;显示结果形如:
The host 192.168.0.1 is UP.
The host 192.168.0.2 is DOWN.
2、使用while循环实现;
3、主机在线状态的输出结果既要显示在屏幕上,同时要求所有主机信息也保存一份至/tmp/host_state;
4、为/tmp/host_state文件中所有主机状态为DOWN的行的行首添加一个#(井号);
5、分别显示指定范围内所有在线的主机总数和不在线主机总数;

1 #!/bin/bash

2 #

3 let I=1#初始化3个变量的值

4 let N=0

5 let M=0

6 while [ "$I" -ne '256' ];do#限定循环范围

7ping -w1 -c1 192.168.0.$I &> /dev/null

8A=$?#判断主机是否ping的通

9if [ "$A" -eq '0' ];then#ping通的输出对应字符,并将输出重定向到指定文件

10echo "The host 192.168.0.$I is UP!"

11echo "The host 192.168.0.$I is UP!" >> /tmp/host_state

12N=$[$N+1]#ping通主机数累加

13else#ping不通的主机输出对应字符,并将输出内容重定向到指定文件

14

15echo "The host 192.168.0.$I is DOWN!"

16echo "#The host 192.168.0.$I is DOWN!" >> /tmp/host_state

17M=$[$M+1]#ping不通的主机数累加

18fi

19 I=$[$I+1]#循环条件累加

20 done

21 echo "totally up is $N."

22 echo "totally down is $M."#循环完毕输出统计结果

#!/bin/bash
let N=0
let M=0
read -p "please input two number for the ip address's range:" A B
if [ "$A" -gt "$B" ]
then 
H=$A
I=$B
else
H=$B
I=$A
fi
while [ "$I" -le "$H" ]
do
ping -w1 -c1 192.168.0.$I &> /dev/null
C=$?
if [ "$C" -eq '0' ]
then 
echo"The host 192.168.0.$I is up !"
echo " The host 192.168.0.$I is up !" >>/tmp/host_state
N=$[$N+1]
else
echo "The host 192.168.0.$I is DOWN!"
echo "#The host 192.168.0.$I is DOWN!" >> /tmp/host_state
M=$[$M+1]
fi
I=$[$I+1]
done
echo "total up is $N"
echo "total down is $M"
[root@localhost ~]# cat panduan1.sh|more 
#!/bin/bash
let N=0
let M=0
read -p "please input two number for the ip address's range:" A B
if [ "$A" -gt "$B" ]
then 
H=$A
I=$B
else
H=$B
I=$A
fi
while [ "$I" -le "$H" ]
do
ping -w1 -c1 192.168.0.$I &> /dev/null
C=$?
if [ "$C" -eq '0' ]
then 
echo"The host 192.168.0.$I is up !"
echo " The host 192.168.0.$I is up !" >>/tmp/host_state
N=$[$N+1]
else
echo "The host 192.168.0.$I is DOWN!"
echo "#The host 192.168.0.$I is DOWN!" >> /tmp/host_state
M=$[$M+1]
fi
I=$[$I+1]
done
echo "total up is $N"
echo "total down is $M"

转载于:https://blog.51cto.com/redhatcciezhang/1242294

sed 和 awk 正则表达式相关推荐

  1. (管道| / 重定向 / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

    原文连接:http://www.cnblogs.com/alwayswyy/p/5191137.html 本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下 一. ...

  2. Shell 编程之正则表达式与文本处理器--(grep,egrep 与文本处理器-sed、awk、sort、uniq、tr)

    文章目录 一.正则表达式 1.1 正则表达式概述 1.1.1 正则表达式的定义 1.1.2 正则表达式用途 1.2 基础正则表达式 1.3 基础正则表达式:grep命令 1.3.1 查找特定字符 1. ...

  3. shell编程之正则表达式与总结(grep,egrep)与文件处理器和总结(sed,awk,sort,uniq)

    文章目录 前言 一:基础正则表达式 1.1:正则表达式的定义 1.2:正则表达式用途 1.3:基础正则表达式 1.4:基础正则表达式:grep命令 1.4.1:查找特定字符 1.4.2:利用中括号&q ...

  4. Linux正则表达式、grep、sed、awk简单使用

    文章目录 正则表达式 元字符 扩展元字符 POSIX字符类补充 使用案例 grep grep的正则表达式 grep使用案例 sed sed使用详解 sed使用方法 sed命令 sed和正则表达式 基本 ...

  5. 七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk

    正则表达式定义 正则表达式,又称正规表达式.常规表达式 使用字符串来描述.匹配一系列符合某个规则的字符串 ●正则表达式组成 ◆普通字符 大小写字母.数字.标点符号及一些其他符号 ◆元字符 在正则表达式 ...

  6. Unix实用工具教程:《sed与awk》修订第三版清晰版

    为什么80%的码农都做不了架构师?>>>    Unix实用工具教程:<sed与awk>修订第三版清晰版 本书介绍了一组名字奇特的Unix实用工具sed和awk,这组实用 ...

  7. 【引用】整理Sed与Awk学习笔记(一)

    一.前言 开卷有益,在it领域有很多学习的途径,个人认为最好的学习教材是原版图书,但由于语言上的问题,大多数人只能望书兴叹!这个文档是根据我自学时的实际情况整理的,和大多数的实际需要情况所写. 其中示 ...

  8. sed和awk的常用实例

    一.文本间隔 1.在每一行后面增加一空行 sed G guo.sh awk '{printf("%s\n\n",$0 ) }' 2.将文件中原来的空行删掉,并在在每一行后边增加一空 ...

  9. sed和awk有什么区别? [关闭]

    awk和sed有什么区别? 什么样的应用程序是sed和awk工具的最佳用例? #1楼 1)awk和sed有什么区别? 两者都是改变文本的工具. 但是除了操作文本之外,awk可以做更多的事情. 它本身就 ...

最新文章

  1. 远程访问及控制(详解)——SSH远程管理及TCP Wrappers 访问控制
  2. php使用redis持久化,redis是如何持久化的
  3. 电热水器和插座之间的相亲故事
  4. 图片图层隐写_【软件】imageIN · 图影-隐藏文件到图片,简单轻快的图片隐写工具...
  5. java图片的导出,并压缩
  6. 股票开盘的最大成交额-----一道不错的贪心算法题目
  7. 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密
  8. python连接mysql用哪个模块_pymysql模块使用---Python连接MySQL数据库
  9. 用 Tenorshare ReiBoot修复iPhone无法开机
  10. 星外系统更换短信接口
  11. 微信小程序富文本编辑器
  12. 上计算机课应该有的表现,计算机应用基础学习过程表现
  13. MACHINE LEARNING ----BY HUNGYILEE (love u)
  14. go-ipfs命令详解之files
  15. 精辟到毒死人的句子,你看或不看,句子就在这里不痛不痒!
  16. 几个免费的长链接缩短链接工具
  17. C++算法之归并排序
  18. Web 前端性能优化
  19. 微信小程序;胡言乱语生成器
  20. 看看一位清华计算机专业的学生怎么看LINUX与WINDOWS的!

热门文章

  1. android edittext最多输入,android 中如何限制 EditText 最大输入字符数
  2. 20200819:力扣202周周赛题解记录
  3. linux创建自定义组件qt,QT中的元对象系统:创建自定义的QT类型
  4. 古筝d调变降e调怎么办_问:古筝k是什么意思
  5. mysql判断不为null
  6. 独家 | 腾讯无人车首次曝光,还把车子开上了四环
  7. 对是否要用Linux的思考
  8. React-Native入门(2)-简单阐述跳转
  9. Jetty插件实现热部署(开发时修改文件自动重启Jetty)
  10. RFID技术正助力物流行业进入新时代