linux打开文件按每行的第一个单词过滤

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux打开文件按每行的第一个单词过滤相关的知识,希望对你有一定的参考价值。

用cat 打开linux的某个文件,怎么去掉多余的行。不是完全相同的,就是多个行,如果第一个单词相同,就只保留一行。其他没什么限制。 比如 linux is a good os linux ,lsjf sdkfjslf jfsldkf i like it 处理之后变为 linux is a good os i like it

您能说的再具体一点吗?我的理解是“只保留开头单词相同的行”但是你这个“相同”是
①全文只保留某一个单词开头的行
还是说
②有n个aaa开头的保留,m个bbb开头的保留
如果是①grep "相同部分*" 文件名 这样就过滤出开头相同的行了,随便 > 到一个新建文件里在改名或导入都行
如果是②就比较麻烦了得写一个脚本
参考技术A 用shell估计比较难。这个估计要用编程的了,毕竟那么多行,需要吧每一个“第一个单词”都要记录下来。shell的数组操作不是那么简单。本回答被提问者采纳 参考技术B cut -c1

-c:以字符为单位进行分割,可以选取指定字符

linux系统下 vi文本编辑器搜索单词打啥命令

如果打:s/old/new/c(或/old)如果单词是old被搜索(这属于正确的)但也有的单词如older(这样的单词也在搜索范围内)我只想搜索old,不想让older这样的在搜索范围内,打什么命令,或是加什么参数。

vi文本编辑器搜索
简单搜索
"/string"用于向下搜索一个字符串,按n按照搜索相同的方向跳转到下一个匹配项,像一般的命令一样,前面加上数字,标示命令计数,比如"2n"代表第三个匹配的目标。按N会和之前命令想法的方向就像搜索下一个。
"?string"用于反向向上搜索字符转,n,N的用法同上。

搜索忽略大小写
:set ignorecase
设置大小写区分
:set noignorecase

命令记录

假设你做过三次的搜索
/one
/two
/there
现在你想再次的重复搜索one,不需要自己输入全部的字符串"/one"
利用命令的记录功能,只需要输入"/"按后通过方向键选择记录,如上,按三次向上方向键即可得到"/one",同样,你可以输入"/o"按后按向上方向键,即可自动匹配第一个以o开头的命令记录。(在:命令模式下,此方法相同使用,命令记录不相混淆)

当你要键入的单词太长时,你可以将光标移到你要搜索的单词上,在普通模式下,按下*键,即可以当前词为搜索向下搜索,#则向上搜索。这种方法上的单词完全匹配,如果你要搜素的字符串可能还包含在一个其他长字符串里面,可以使用g*,g#进行搜索。

在本行搜索某一个字符
fx 在当前行,向前将光标移动到字符x上
Fx 在当前行,向后将光标移动带字符x上
tx 在当前行,向前将光标移动到字符x之前的字符上
Tx 在当前行,向后将光标移动到字符x之后的字符上
, 按照上次搜索(f,F,t,T)的反向进行搜索
; 重复上次搜索

使用"/the"会搜索到there,soothe,the,athea
可以通过不同的方法匹配不同的搜索
"/the/>" 得到结果there
"//<the" 得到结果soothe
"//<the/>" 得到结果the
"/>"是一特殊记法,只匹配一个Word的结束处
"/<"是一特殊记法,只匹配一个Word的开始处

高亮显示搜索结果
将搜索的家国高亮显示,将十分的直观
开启:set hlsearch
关闭:set nohlsearch

调整搜索结果
:set incsearch 这使得你在键入目标字符的时候vim就开始搜索,使用这种方法,可以使你在未完全输入目标的情况下就可以找到一些结果

使用正则表达式
^字符匹配一行的开头
$字符匹配一行的结尾
eg:
将光标移动到下面一句话的第一个the上,输入*
the solder holding one of the chips melted and the
XXX XXX XXX(搜索高亮标记)
输入"/thetiny_mce_markerquot;得到以下匹配结果
the solder holding one of the chips melted and the
XXX(搜索高亮标记)
输入"/^the"则得到以下结果
the solder holding one of the chips melted and the
XXX (搜索高亮标记)
同理输入"/^thetiny_mce_markerquot;将匹配一行内容仅含the的行

/jo[ha]n 将搜索john或者joan
.字符可以匹配任意字符
eg:
"/t.e" 将搜索匹配the tee等
(如果你要搜索的字符串里包含特殊字符,比如.则适应转义字符/房子特殊字符前面)
"//<..../>" 将搜索任何四个字母的字符串

/d代表一个数字
//d 搜索数字 a1a
//</d/> 搜索作为独立单词的一个数字 1
//</d/d/> 搜索作为独立单词的两个数字 12
/^$ 搜索空白行
/^/n 同上
--------
指定重复的次数
--------
要制定重复的次数,可以使用"/n,m"这样的形式。"n"和"m"代表数字,其前的项目会被匹配"n"次到"m"次
/^/n/3 搜索三个空白行
/ab/3,5 匹配"abbb","abbbb","abbbbb"
如果"n"被忽略,就默认它是0,如果"m"忽略,就默认它是无穷大,如果",m"被忽略,那么精确匹配"n"次重复
/,4 0,1,2,3,4次
/3, 大于等于3次
/3,4 3,4次
/4 4次
/= 0或者1
* 0或者多次
/+ 一次或者多次

--------
多选一
--------
在一个操作中的"或"操作符是"/|"。如:
/fred/|joe 将搜索fred或者joe
多个选项能继续串联在一起
/one/|two/|three
/end/(if/|while/|for/) 匹配的是"endif","endwhile","endfor"

--------
字符范围
--------
[a-z] a到z中的一个字符
[^a-z] 除了a到z中的一个字符
预定义字符集
//a 所有字母 /[a-zA-Z]
//d 数字 /[0-9]
//D 非数字 /[^0-9]
//x 十六进制数 /[0-9a-fA-F]
//X 非十六进制数 /[^0-9a-fA-F]
//s 空白字符 /[ ]
//S 非空白字符 /[^ ]
//l 小写字母 /[a-z]
//L 非小写字母 /[^a-z]
//u 大写字母 /[A-Z]
//U 非大写字母 /[^A-Z]
//h /[A-Za-z]
//w /[0-9A-Za-z]
参考技术A \<代表单词边界,比如搜索\<old,只匹配old,older,old3...
\>代表单词结尾边界,比如搜索old\>,只匹配old,llold,3old...
所以\<old\>就是你要的结果。

:s/\<old\>/new/c
或 /\<old\>
参考技术B 打/,然后输入需要搜索的内容,n N 是查找下一个和上一个的。 参考技术C /old > 试试 参考技术D /<要查找的字符>向下!
?<要查找的字符>向上!

以上是关于linux打开文件按每行的第一个单词过滤的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础-sed+正则表达式

文件打开和文件保存

vim打开文件中每行末尾都带有 ^M

linux系统下 vi文本编辑器搜索单词打啥命令

使用 Python 在每行的第一个和第二个单词后插入逗号?

Linux文本编辑命令