「Linux技巧」使用vi删除文本中的重复行 (linux vi删除重复行)

Linux技巧:使用vi删除文本中的重复行

在Linux系统中,vi是一款常用的文本编辑器。它可以查看和修改各种文件,包括文本文件、脚本和配置文件等。有时候,我们需要处理大量的文本数据,而文本中含有重复的行,这对数据分析和处理带来了很大的困扰。本文将介绍如何使用vi编辑器删除文本中的重复行,让数据分析和处理更加轻松。

一、使用vi编辑器打开文本文件

需要使用vi编辑器打开需要删除重复行的文本文件。在终端输入以下指令:

vi filename

其中,filename是要打开的文本文件名。如果文件在当前目录下,可以直接输入文件名。如果文件在其他目录下,需要输入完整的文件路径。

二、使用sort命令排序文本行

为了标识出文本中的重复行,需要先将文本行进行排序。在vi编辑器中,可以使用sort命令来对文本行排序。在普通模式下,输入以下指令:

:%!sort

其中,%表示整个文本文件,!表示调用外部命令,sort表示排序命令。执行完毕后,整个文本文件的行都被重新排序。

三、使用uniq命令删除重复行

使用sort命令排好序的文本,可以直接使用uniq命令删除重复的行。在普通模式下,输入以下指令:

:%!uniq

其中,%表示整个文本文件,!表示调用外部命令,uniq表示去重命令。执行完毕后,整个文本文件的重复行都被删除。

四、使用vi编辑器保存和退出文本文件

完成去重操作后,可以使用vi编辑器保存和退出文本文件。在普通模式下,输入以下指令:

:wq

其中,w表示保存命令,q表示退出命令。执行完毕后,文本文件的修改已经保存,编辑器已经退出。

结语:

上述方法可以非常方便地使用vi编辑器删除文本中的重复行。通过这种方法,我们可以更加方便地进行数据分析和处理。在日常使用中,也可以灵活运用这些命令进行各种文本处理操作,提高工作效率。

相关问题拓展阅读:

在命令行模式下执行命令

输入命令按下enter键就会开始执行,如果输入的命令很长,可以使用反斜杠\来转义enter符号,使命令连续到下一行。

在linux环境中大小写是不同的

1.显示日期和事件的命令:date

如果想要输出特定格式的日期和事件需要带上参数

例如:date +%Y/%m/%d

date +%H:%M

2.显示日历的命令:cal

cal的基本能语法:cal year>

可以显示某年的日历:例如,cal 2023

可以显示某年某月的日历:例如,cal

3.计算器命令:bc

输入bc命令就进入bc这个软件的工作环境,就可以像在windows中一样进行加减乘除,

+加法,-减法,*乘法,/除法,^指数,%

余数

bc默认是输出整数的,如果要输出全部小数,就必须执行scale=number,其中number就是小数点后的位数。

要离开bc,需要输入quit才能离开bc软件环境。

1.tab键:用于补全命令或者补全文件

2.ctrl+c:用于中断目前正在运行的命令

3.ctrl+d:表示键盘输入结束,也可以用来代替exit的输入。

命令行

中直接按下两次tab键,可以看到总共有多少个命令可以供当前用则喊户使用。

可以使用man 命令名来查看命令的具体用法。

其中man是manual的缩写。

数据同步写入磁盘中:在关机前可以使用命令sync将内存中尚未被更新的数据就会被写入硬盘中。

关机命令

.sh

utdown、reboot、halt、poweroff

系统执行等级:

run level 0:关机

run level 3:纯命令行模式

run level 5:含有图形界面模式

run level 6:重启

可以使用init命令来切换各种模式,例如想要关机的话,也可以使用init 0。

Linux文件属性

ls -al 列出所有的文件,-al表示列出所有的文件详细的权限和属性。

例如

drwxr-xroot rootSep 8 14:06 .gconfd

-rwxr-xr-xroot rootJan 3 11:01 install.log

1.之一列文件的类型与权限

之一列由10个字符组成:

之一个字符代表这个文件是目录、文件或者链接文件等

其中d表示目录,

-表示是文件

l表示是连接文件

接下来的字符中,以三个字符为一组,均是rwx的组合,其中r表示可读,w表示可写,x表示可执行。如果没有相应的权限就用-表示。

这三组分别表示的权限是:

之一组为”文件所有者的权限“

第二组为”同用户组的权限“

第三组为”其他非本用户组的权限“

2.第二枯返列表示有多少个文件名连接到此节点上

3.第三列表示这个文件或目录的所有者账号

4.第四列表示这个文件所属的用户组

5.第五列表示这个文件的大小,默认单位为B

6.第六列表示这个文件的创建日期或这个文件的修改日期。

7.第七列表示这个文件名

改变文件属性和权限:

chgrp(change group):改变文件的所属用户组

chown(change owner):改变文件所有者

chmod:改变权限,权限的设置有两种方式,使用数字或者符号来进行权限的更改。

数字类型改变权限:

使用数没盯饥字分别代表各个权限,其中:

r:4

w:2

x:1

owner、group、others三种身份各自有自己的rwx权限,三个权限的分数需要累加。例如

owner = rwx = 4 + 2 + 1=7

group = rwx = 4 + 2 + 1 = 7

others = — = 0 + 0 + 0 = 0

那么这个文件的权限数字就是770

符号类型改变权限:

使用u,g,o分别代表user、group、others三种身份的权限,a表示所有身份

例如:

一个文件的权限为:-rwxr-xr-x

user:有可读、可写、可执行的权限

group:有可读、可执行的权限

others:有可读、可执行的权限

可以使用命令 chmod u=rwx,go=rx install.log

给install.log文件的所有用户增加写权限

chmod a+w install.log

给install.log文件的所有用户去掉可执行权限

chmod a-x install.log

Linux下文件没有所谓的

扩展名

,一个linux文件能不能被执行,与文件名没有一点关系,而是权限中有x,就代表这个文件可以被执行。

通常会以适当的扩展名来表示文件是什么种类的。例如,

.sh表示脚本或

批处理文件

.Z、

.tar、

.

tar.gz

.zip、

.tgz都表示压缩文件。

FHS(Filesystem Hierarchy Standard)标准用于让用户能够了解到已安装的软件通常放置在哪个目录下。FHS根据

文件系统

使用的频繁与否和是否允许用户随意改动,而将目录定义成四种

交互作用

的形态。分别如下:

可分享的 不可分享的

不变的:/usr(软件放置处)、/opt(第三方软件)/etc(

配置文件

)、/boot(开机与内核文件)

可变动的: /var/mail(用户邮件信箱) /var/run(程序相关)、/var/lock(程序相关)

/var/spool/news(新闻组)/var/lock(程序相关)

可分享的:可以分享给其他系统挂载使用的目录,所以包括

可执行文件

与用户的邮件等数据,是能够分享给网络上的其他主机挂载用的目录。

不可分享的:自己机器上运行的设备文件或者程序有关的socket文件等,不适合分享给其他主机。

不变的:数据不经常变动。

可变动的:数据经常变动

根目录

(/):是整个系统最重要的目录,不仅所有其他目录是由根目录衍生出来的,而且根目录与开机、还原、系统修复等操作有关。根目录所在的分区越小越好,并且

应用程序

所安装的软件更好不要与根目录在同一个分区。

开机过程中仅有根目录会被挂载,其他的分区会在开机完成之后才会持续进行挂载,因此根目录下与开机过程有关的目录就不能够与根目录放到不同的分区去。有如下这些目录:

/etc:配置文件

/bin:重要执行文件

/dev:所需要的设备文件

/lib:执行文件所需的函数库与内核所需的模块

/in:重要的系统执行文件

/usr(UNIX software resource)unix操作系统软件资源,所有系统默认的软件都会放置在该目录下,因此这个目录有点类似与windows下的“C:\Windows”和“C:\Program files”。

/var 放置一些缓存、登录文件以及某些软件运行所产生的文件。

相对路径和绝对路径:

绝对路径:由根目录/开始写起的文件名或目录名称。

相对路径:相对于当前路径

.:或者./表示当前路径

..:或者../表示上层目录

几个特殊的目录

.代表此层目录

..代表上层目录

~ 代表“目前用户身份”所在的主

文件夹

~account 代表account这个用户的主文件夹

几个常见的处理目录的命令

cd:切换目录

刚登录时会回到自己的主文件夹,主文件夹有一个代表符号就是~,cd ~会回到个人的主文件夹中,仅输入cd和输入cd ~相同。

pwd:显示当前目录

pwd 其中-p表示显示当前路径,而不是使用连接路径。加上-p可以让我们取得正确的目录名称。

mkdir:创建一个新目录

mkdir 目录名称,其中m参数表示配置文件夹的权限。p参数表示递归创建所需要的所有目录

rmdir:删除一个空目录

rmdir 目录名,其中p参数表示连同上层空的目录一起删除。要删除的目录中必定不能存在其他的目录或文件。

执行文件路径的变量:$PATH

例如查看文件属性的命令是ls,而ls完整的文件名是/bin/ls,为什么我们可以在任何地方执行ls这个命令呢,这是因为

环境变量

PATH的帮助。当我们输入ls的时候,系统会依照PATH的设置去每个PATH定义的目录中查找文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查询到的同名命令先被执行。

默认情况下,如果用户创建文件,则默认没有可执行权限(x),只有r、w这两个选项,即默认权限是-rw-rw-rw(666)

默认情况下,如果用户创建目录,则默认所有权限均开放,即为drwx-rwx-rwx(777)

unmask的分数是指“该默认值需要拿掉的权限”,例如上面的022表示用户没有被拿掉任何权限,用户组和其他被拿掉了写的权限。

如何使用unmask修改新建文件的默认权限,直接在unmask后面加上分数就好了

比如:

···

unmask 002 就表示用户和用户组的读写权限不被拿掉,其他会被拿掉写的权限

···

2.与用户或用户组名有关的参数

-uid n 其中n表示数字,即用户的ID,也称为UID

-gid n 其中n表示数字,即用户组名的ID,也称为GID

-user name 其中name为用户的账号名称

-group name 其中name为用户组名

-nonuser 表示寻找文件的所有者不存在在/etc/passwd中的文件

-nongroup 表示寻找文件的所有用户组不存在于/etc/group中的文件

例如:

3.与文件权限及名称有关的参数

-name filename 查找文件名为filename的文件

-size SIZE 查找比size大(+)或小(-)的文件

-type TYPE表示查找文件类型为TYPE的文件

-perm mode表示查找文件权限刚好等于mode的文件

-perm -mode表示查找文件权限必须全部包括mode的权限的文件

例如 查找文件权限为-rwxr–r–的文件,即权限744,那么文件权限为-rwxr-xr-x(755)的文件也会被列出来,因为-rwxr-xr-x的属性包括了-rwxr–r–的属性

-perm +mode表示查找文件权限包含任一mode的权限的文件,例如查找-rwxr-xr-x,但是另一个文件属性包括-rw的文件也会被列出来,因为它有-rw属性存在

4.其他可进行的操作

-exec command :其中command表示其他命令,-exec表示接其他命令来处理查询的结果

-print 表示将结果打印在屏幕上

vi和vim的区别是vim是vi的高级版本

为什么要学vim

1.所有的linux like 系统都会内置vi文本编辑器,而其他的文本编辑器不一定有

2.很多软件的编辑接口都会主动调用vi

3.vim有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便设计

vi的使用:

vi有三种模式:一般模式、编辑模式、命令行模式

一般模式:使用vi打开一个文件的时候就进入了一般模式,在这个模式中可以按左右键移动光标,可以删除字符或删除整行,也可以复制粘贴你的文件数据。但是不可以编辑文件。

编辑模式:在一般模式下按下“i 、I、o、O、a、A、r、R”等任何一个字母才会进入编辑模式,按esc退出编辑模式

命令行模式:在一般模式下,输入“:、/、?”就进入了,命令行模式,在这个模式下可以进行读取、保存文件,离开vi等操作。

编辑牧师和命令行模式之间是不可以切换的。

一般模式切换到命令行模式可用的按钮

:w 表示将编辑的内容写入到硬盘中

:w! 表示如果文件属性为 只读时,强制写入该文件

:q表示离开vi

:q!表示如果文件有修改过,不保存强制退出,

:wq表示保存后离开

vim的用法和vi完全一样

管道命令仅会处理standard out,对于standard error output会予以忽略

管道命令必须要能够接收来自前一个命令的数据成为standard input继续处理才行

选取命令:cut,grep

1.cut -d ‘分隔符’ -f field

cut -c 字符范围

-d表示分隔符

-f表示与-d分隔符一起使用,表示取分割后的第几段

-c表示以字符为单位取出固定字符区间

以“行”为单位进行处理的选取

例如:

2.grep

grep ‘查找的字符串’ filename

其中

-a表示将binary文件以text文件的放肆查找数据

-c表示计算找到“查找字符串”的次数

-i表示忽略大小写的不同

-n表示输出行号

-v表示反向选择,即显示出没有‘查找字符串’内容的那一行。

–color=auto表示将找到的关键字部分加上颜色

例如:

首先学习一下grep命令的一些高级参数

grep ‘搜索字符串’ filename

其中:

-A :后面可加数字,表示after的意思,除了列出该行外,后续的n行也列出来。

-B :后面可加数字,表示before的意思,除了列出该行外,前面的n行也列出来。

–color=auto表示将选取的数据添加颜色

grep是一个很常用的命令,grep在数据中查找一个字符串时,是以整行为单位来进行数据的选取的。假如一个文件有10行,其中有两行具有你查找的字符串,则将那两行显示在屏幕上,其他的丢弃。

例如

1.查找特定的字符

2.利用中括号来查找字符

里面不论有几个字符,它都只代表某“一个”字符

3.行首与行尾字符^$

^ 出现在之外表示定位在首行,^ 出现在中表示方向选择

4.任意一个字符.与重复字符*

.(小数点):代表一定有一个任意字符

*(星号):代表重复前一个字符0到无穷次的意思

例如:

5.限定连续RE字符范围{}

因为符号{}在shell中是有特殊意义的,因此必须要使用转义字符\来让它失去特殊意义才行。

例如

^word 表示待查找的字符word在首行

word$ 表示待查找的字符在结尾

.(小数点)表示一定有一个任意字符的字符

\表示转义字符,将特殊符号的特殊意义去掉

*表示重复零个或无穷多个前一个字符

表示从字符list中找出想太选取的一个字符

表示从字符集中查找想要选取的字符范围

表示从字符集中查找不要的字符串或范围

{n,m}表示连续n到m个前一个字符,若为{n}表示连续n个前一个字符,{n,}表示连续n个以上前一个字符。

sed命令可以将数据进行替换、删除、新增、选取特定行等

sed

其中

-n表示使用安静模式,在一般sed用法中,所有来自STDIN的数据一般都会被列出在屏幕上,但如果加上-n参数后,则只有经过sed特殊命令处理的那一行才会被列出来。

-e表示直接在命令行模式上进行sed的动作编辑

-f表示直接将sed的动作写在一个文件内

-r表示sed的动作支持的是扩展型的正则表达式,默认是基础型的正则表达式

-i表示直接修改读取的内容,而不是由屏幕输出

动作说明:

> function

n1,n2:不一定会存在,一般代表选择进行动作的行

function 有下面的参数

a表示新增,a后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)

c表示替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行

d表示删除

i表示插入,i后买呢可以接字符串,而这些字符串会在新的一行出现(目前的上一行)

p表示打印,将某个选择的数据打印出来,通常会和参数-n一起运行

s表示替换,可以直接进行替换工作,sed ‘s/要被替换的字符串/新的字符串/g’

例如

awk是非常棒的数据处理工具。

awk ‘条件类型1{动作1} 条件类型2{动作2} 条件类型3{动作3}….’ filename

awk主要是处理每一行的字段内的数据,而默认的字段的分隔符是空格键或键。

例如

awk内置变量有:

例如:

awk的逻辑运算符

例如:

我们发现上面会输出之一行奇怪的数据,是因为当读入之一行的时候,变量之间还是以空格键进行分隔的,所有,我们虽然定义了FS=”:”,但是却在第二行后开始生效,我们可以利用BEGIN这个关键字。

使用awk进行计算统计

例如

格式输出中,在printf的格式设置中,务必加上\n,才能进行分行

在awk中变量可以直接使用,不用加上$符号

crontab进行工作调度

crontab

-u表示只有root才能进行这个任务

-e表示编辑crontab的工作内容

-l表示查阅crontab的工作内容

-r表示删除crontab的所有工作内容

例如

其中由6个字段组成

分别表示的意义是:

分钟 小时 日期 月份 周 命令

-7 命令

其中周的0和7都表示星期日

表示任意时刻

,(逗号)表示分隔时段的意思,例如0 3,6 * * * commond,表示在3和6时执行

-(减号)表示一段时间范围,例如* * * commond,表示8到12时之间每小时的20分执行。

/n(斜线)表示每隔n单位间隔的意思,例如

/5 * * * * commond,表示每隔5分钟执行一次。

执行crontab -e这个crontab其实是/usr/bin/crontab这个执行文件。

linux vi删除重复行的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux vi删除重复行,「Linux技巧」使用vi删除文本中的重复行,在命令行模式下执行命令的信息别忘了在本站进行查找喔。


数据运维技术 » 「Linux技巧」使用vi删除文本中的重复行 (linux vi删除重复行)