【Linux】sed、awk、cut、sort常用命令

Linux篇】sed命令详解 文章目录sed命令详解一、基本语法二、实操案例内部命令选项说明命令选项说明标志三、sed小技巧 sed命令详解 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。 一、基本语法 sed [options] '{command}[flags]' [filename] # 中括号内容必有 大 阅读详情

1、利用sed命令在/etc/passwd中分别查找满足以下条件的行:

  首先在操作之前,先整一份数据,为了可视化方便,整到桌面。(之所以费劲整到桌面上就是为了照顾一些初学者,当执行完下面两句命令后,会发现桌面上多了一个文件,相当于是看到正反馈了,就会给人信心,告诉自己付出就有回报。)

cd ~/Desktop
cat /etc/passwd >> passwd

(以下命令可以在终端直接运行,也可以写成Shell文件,当然得先知道什么是sed)
sed说明
总结一下:
sed - 以流编辑方式来过滤和转换文本

(1) o字符重复任意次

sed -n '/o*/p' passwd

或者

#! /bin/bash
sed -n '/o\{0,\}/p' passwd
echo "运行结束"

(2) o字符重复一次以上

 sed -n '/o\{1,\}/p' passwd

(3) o字符重复两次以上

sed -n '/o\{2,\}/p' passwd
或者
sed '/o.*o/p' /etc/passwd   #可连续可不连续

命令总结:

  sed中使用正则表达式,先写出来 sed -n ‘//p’ 文件名
然后再在//中填写正则表达式,注意圆括号()和花括号{}都需要转义符,即\(\)\{\},如下所示

sed -n '/正则表达式/p' 文件名

sed的正则表达式
简单介绍一下 正则表达式

.  表示除.之外任意单个字符
*  重复0-n次
+  重复1-n次
? 重复0-1次 
{m} 重复m次
{m,n} 重复m-n次
{m,} 至少重复m次

2、利用sed命令将input文件中的\OU字符串修改为(ou)

sed 's/\\OU/(ou)/gp' input

g代表global 全局匹配,
否则一旦匹配到,就换下一行处理了

命令总结:

  先写出来 sed -n ‘s///gp’ 文件名 g :global 表示全局匹配
然后再在///(三斜杠)之间填写字符串,如下所示

sed -n 's/原字符串/替换后字符串/p' input

sed的替换命令

3、利用sed命令打印input文件中除第3-8行之外的所有行,在以下三种不同选项组合下运行该命令:

(1)不带任何选项:

sed '3,8d' passwd

(2)只带一p选项;

sed '3,8!p' passwd

(3)同时带一n和一p选项

sed -n '3,8!p' input

命令总结

  (1)不带任何选项是不可能的,题目的意思是不打印3-8行内容,所以直接的想法就是将3-8行内容删除,即delete,对应的就是d选项
  (2)如果不带-n选项的话,p选项会将处理过的行打印两编,没处理过的行打印一遍。
  (3)带上-n会呈现静默打印,意思就是打印出来你想要的效果。
sed的-n选项
这道题就是让你知道一下,带-n和不带-n的区别:带-n 静默打印,只打印一行;不带-n,会重复打印两行。

4、用两个不同的命令实现如下功能:将input文件中的\OU字符串修改为(ou),并在与\OU的匹配行后追加“We find \OU!”字符串。

sed -n -e 's/\\OU/(ou)/g ; s/(ou).*$/&We find \\OU/gp' input
	或者
sed -n -e 's/\\OU/(ou)/g' -e 's/(ou).*$/&We find \\OU/gp' input

命令总结:

  首先,需要组合命令,有两种方式,一种是用分号隔开,一种是多个 -e 即如下所示

	  sed -e '命令1;命令2' 文件名
	  sed -e '命令1' -e '命令2' 文件名

sed的-e选项

  然后是在行末追加,其实本质还是替换语句,只不过在’s//&这里/’,的开头加上&后就变成在所要替换的内容之后追加,至于行末,就是在’s/这里//′的后面加上//' 的后面加上//表示行末,这样就符合在所要替换内容的行末之后追加命令如下:

	  sed -n 's/(ou).*$/&We find \\OU/gp' input

  如果是行首的话,应该是’s/^这里/替换后的字符串&/’ 的前面加上^,并且看到替换后的字符串也就到了&符号之前了,命令如下:

	  sed -n -e 's/\\OU/(ou)/g' -e 's/^.*(ou).*/WE find&/gp' input

  可以仔细体会一下。

还有一种方式,只不过这个追加是另起一行进行追加的

另一种方式

5、将input文件中的abcde字符分别用EDCBA替换。

sed 'y/abcde/EDCBA/' input

命令总结:sed ‘y/…/…/’ 可以进行字典替换

man sed 中的解释:
y/source/dest/
       Transliterate the characters in the pattern space  which  appear
       in source to the corresponding(相应的) character in dest.

7、在student文件中有7个域,表示学生姓名、籍贯、语文,C语言,数据库,离散数学,java考试成绩,student内容如下:

姓名 籍贯 语文 C语言 数据库 离散数学 Java
1  2  3  4  5   6    7

张敏 南京 76 89 66 93 67
李准 石家庄 86 92 76 83 87
小飞 邢台 88 66 55 96 93
王波 岳阳 93 79 85 78 90
柏慧 无锡 94 76 82 86 91
图雅 绍兴 96 77 86 84 90
安冬 绍兴 96 87 96 94 97

(1)按Java考试成绩排序,从低到高,如果Java成绩相同,再按离散数学排序从高到低。

sort -k 7,7n -k 6,6nr student
对-k -n -r的解释
-k, --key=POS1[,POS2]
       start a key at POS1 (origin 1), end it at POS2 (default end of line)
-n, --numeric-sort
              compare according to string numerical value
-r, --reverse
       reverse the result of comparisons

运行结果(根据评论,已更正):
运行结果

(2)按籍贯统计学生人数

cut -d " " -f 2 student | sort |uniq -c

cut -d " " 按空格进行切割
    -f 2   使用第2域的数据,域即列
uniq -c    统计重复的行

运行结果,sort可以没有
统计结果

(3)找出Java成绩最高的前五名学生的情况

sort -k 7,7nr student | head -5

head -m 取前m个记录

运行结果
head结果

命令总结

这些命令如果不会的话,可以随时man sort,或者man cut,或者 man 你想查的命令,我这里简单写几个:

sort 小结

分隔符 -t
-t, --field-separator=SEP use SEP instead of non-blank to blank transition
按字典排序(默认升序)
-d, --dictionary-order consider only blanks and alphanumeric characters
字典,Linux默认编码是UTF-8,即Linux的字典
图 < 安 < 小 < 李 < 柏 < 王
\u56fe\u5b89\u5c0f\u674e\u67cf\u738b
翻转 -r
sort默认是升序排序的,加上r选项就可以变成降序排序

cut 小结

定界符 -d (类似sort里面的分隔符 -t)
-d, --delimiter=DELIM use DELIM instead of TAB for field delimiter

8 利用awk完成,针对Student文件

下面这些 内容就是awk了,awk官方说是一门编程语言,几句话讲不清,具体可以在命令行输入man awk查看官方文档。

(1)列出姓名,所有课程总分, 平均分

awk '{ print $1,$3+$4+$5+$6+$7,($3+$4+$5+$6+$7)/5; }' student

运行结果
运行结果

(2)列出总分最高的人的记录。(根据评论,已更正)

awk求总分最高分
运行结果:
更正

(3)学生总分小于450的学生姓名

awk '{ if(($3+$4+$5+$6+$7)<450)  print $1; }' student

9. 写一个命令,去掉某文件中所有的空格符,并将结果存储到a.txt。

sed 's/ //g' student > a.txt

10.写一个命令,输出某Shell变量中所包含字符的个数。

在此基础上,再写一个命令,输出该变量中所包含字母的个数(空格不计算在内 )。(提示:用sed和wc命令)

s="123abcde456 fghi"

echo ${#s}
上面的结果空格也计算在内
下面使用sed去掉空格
x="erte dgg rgtd rg"

echo $x |sed 's/ //g' |wc -c

wc -c 统计字节
wc -m 统计字符
因为英文一个字符就是一个字节,所以 -c和-m可以混用

追加三道大题

一、Shell编程:双重循环显示图形

打印正三角
运行结果:
运行结果

变形,打印倒三角

倒三角代码
运行结果:
倒三角结果

二、回文数函数

回文数函数
运行结果:
回文数运行结果

三、求素数

素数函数
运行结果:
素数运行结果

撒花出门记得点赞哟!撒花

sed命令常见用法 运用sed命令高效地删除文件的特定行 1. 删除某一行 首先,我们先从删除某一行开始,比如删除第一行、最后一行,实际也就是第 N 行嘛。 删除第 N 行的命令格式: sed 'Nd' file 删除最后一行 # sed '$d' sed-demo.txt 2. 删除某些行 sed 命令可以删除连续又或者不连续的行内容。 删除连续的行,例如删除从 5 到 7 行 的内容: # sed '5,7d' sed-demo.txt 删除不连续的行,例如删除第 1 、第 5 、第 9 和最后一行: # sed ' 阅读详情

相关推荐

linux sed命令使用详解

linux sed命令使用详解

congge 1万+

Sed命令详解

详细说明了sed命令的功能与工作原理,基础用法与进阶用法都涵盖了。sed身为Linux文本处理三剑客之一,不可不会。

m0_50111062的博客 2万+

linux在第一行插入文本

sed -i '1i\c1,c2,c3,c4,c5,c6,c7' data.csv # 创建一个文本data.csv,输入如下内容。 col1,col2,col3,col4,col5,col6,col7 1,2,3,4,5,6,7 2,2,3,4,5,6,7 3,2,3,4,5,6,7 4,2,3,4,5,6,7 5,2,3,4,5,6,7 6,2,3,4,5,6,7 7,2,3,4,5,6,7 # 在文件第一行插入文本『c1,c2,c3,c4,c5,c6,c7』 sed -i '1i\c1,c2.

Learning 6768

【shell】sed命令用法详解

sedLinux下的一款强大文本编辑工具,支持按行、按字段、按正则匹配进行文本的增删改查。

浩瀚之水的专栏 6737

linux 去掉csv文件第一行,使用PowerShell删除文本文件的第一行

使用PowerShell删除文本文件的第一行我试图在导入它们之前删除大约5000个文本文件的第一行。我对PowerShell还是很陌生,因此不确定要搜索什么或如何进行此操作。 我当前使用伪代码的概念:set-content file (get-content unless line contains amount)但是,我似乎无法弄清楚如何执行包含操作。Buddy Lindsey asked 20...

weixin_29763721的博客 1124

awk取列 shell 读文件_科学网—Linux:使用awk命令获取文本的某一行,某一列,awk删除文件第一 - 贺小星的博文...

awk 'NR>1' AIRA_GPS.aload>ccc去掉第一行awk 'NR>2{print p}{p=$0}' urfile第一行时, NR=1, 不执行print, p=第一行的内容第二行时, NR=2, 不执行print, p=第二行的内容第三行时, NR=3, 执行print p,此时p=第二行的内容, 即打印第二行, 然后p=第三行............最后一行...

weixin_29758513的博客 521

Linux实用小命令之删除文件第一行

工作中你有没有遇到过要把一个文本文件,比如user.txt 导入到数据库user_table中,但这个文本中除了一行行数据外,第一行是表头字段,那这一行其实不属于数据,是要剔除掉的。这是你会怎么办? 有人肯定说用vi或者vim直接打开删除第一行,这个方法可行,但要是文本太大呢,vi,vim等工具就不太好用了。而且步骤繁琐。 其实Linux中有个很好用的命令 sed 可以帮我们实现这个功能,删除文本...

兰海泽的博客 1万+

Linux sed之删除文件第一行

使用sed命令 删除第一行 sed -i '1d' filename 删除第n行 sed -i 'nd' filename 删除最后一行 sed -i '$d' filename

lanfengchalan的博客 4万+

linux下删除文件首行,科学网-Linux:使用awk命令获取文本的某一行,某一列,awk删除文件第一-贺小星的博文...

awk 'NR>1' AIRA_GPS.aload>ccc去掉第一行awk 'NR>2{print p}{p=$0}' urfile第一行时, NR=1, 不执行print, p=第一行的内容第二行时, NR=2, 不执行print, p=第二行的内容第三行时, NR=3, 执行print p,此时p=第二行的内容, 即打印第二行, 然后p=第三行............最后一行...

weixin_39559486的博客 1454

c++ 如何将输入的内容输出到文本文件 要建立文本文件嘛_linux/unix下如何使用命令行删除文本文件的第一行?

在日常开发中,我们也经常会遇到使用Linux命令行删除文本文件的第一行的情况。本文将与您分享如何使用linux命令行工具删除文本文件的第一行。以下是本文中使用的测试文本文件的内容:This is a test file.The sed command can use the action option d to remove any line of the file.The awk command...

weixin_39627665的博客 183

dataframe只打印第一行_linux/unix下如何使用命令行删除文本文件的第一行?

在日常开发中,我们也经常会遇到使用Linux命令行删除文本文件的第一行的情况。本文将与您分享如何使用linux命令行工具删除文本文件的第一行。以下是本文中使用的测试文本文件的内容:This is a test file.The sed command can use the action option d to remove any line of the file.The awk command...

weixin_39614831的博客 475

linux sed给空文件首行插入_linux – 如何使用sed将文本插入文件的第一行?

嗨,我正在尝试使用sed将文本添加到文件的第一行到目前为止,我试过了#!/bin/bashtouch testsed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test这不起作用也试过了#!/bin/bashtouch testsed -i "1i ssl_certificate /etc/example/live/exampl...

weixin_36182226的博客 1265

linux去掉文件空行,linux下删除文本的空行

事情的起因是这样的,我有一个文件,用,分割的,第一列是染色体ID,我想知道这里面有多少个 ID,因此我想到去重计数。下面是我的代码。cuiqingmei 2019/10/11 13:36:05 /if$ less CL100126046-L01_1.win.gz |cut -f 1 -d,|sort|uniq -c244156 12260 102252 112232 121921 131791 ...

weixin_36228334的博客 1090

linux 删除文件第一行的方法

删除第一行 sed -i '1d' filename 范围删除,删除1-3行 sed -i '1,3d' filename 删除第n行 sed -i 'nd' filename 删除最后一行 sed -i '$d' filename

微步的博客 2万+

Linux如何在文件中新建一行,linux – 如何使用sed将文本插入文件的第一行?

嗨,我正在尝试使用sed将文本添加到文件的第一行到目前为止,我试过了#!/bin/bashtouch testsed -i -e '1i/etc/example/live/example.com/fullchain.pem;\' test这不起作用也试过了#!/bin/bashtouch testsed -i "1i ssl_certificate /etc/example/live/exampl...

weixin_42528780的博客 3478

linux下删除文件的第一行

1,删除文件file 中第一行内容    命令sed -i '1d' file

yychenxie21的专栏 1万+

cmd读取文本第一行_Linux里面常用的查看文本小技巧

作者:Danny_idea链接:https://blog.csdn.net/Danny_idea/article/details/98670880日常开发中,我们经常需要在服务器上边进行各种文本,日志的查看操作,本文主要对常用的文本,日志查看技巧进行了一番总结和归纳,方便大家收藏起来后续查看使用:tail命令查看日志信息实时监控日志:tail-ffilename实时监控10行日志信息...

weixin_39737831的博客 1900
上一篇: 【大数据】CentOS6.5x64搭建Hadoop环境
下一篇: 【大数据】解决Hive JDBC的连接出错的一种问题
midnight_time
博客等级 码龄9年 1714粉丝 97原创
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值