当前位置: 首页 > news >正文

【Shell牛客刷题系列】SHELL13 去掉所有包含this的句子:awk与gawk命令的进阶使用



该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令。

刷题链接:牛客题霸-Shell篇。

该系列文章都放到专栏下,专栏链接为:《专栏:Linux》。欢迎关注专栏~

本文知识预告:

  • 首先学习了用于模式扫描和处理语言的gawk命令;
  • 然后结合之前所学的命令,给出了七种方法,值得一学~


题目:SHELL13 去掉所有包含this的句子

编写一个shell脚本以实现如下功能:去掉输入中含有this的语句,把不含this的语句输出。假设输入如下:

that is your bag
is this your bag?
to the degree or extent indicated.
there was a court case resulting from this incident
welcome to nowcoder

你的脚本获取以上输入应当输出:

that is your bag
to the degree or extent indicated.
welcome to nowcoder

说明:你可以不用在意输出的格式,包括空格和换行。

相关命令学习

gawk命令 – 模式扫描与处理语言

gawk是Unix中原始awk程序的GNU版本,强大之处在于可以写脚本来读取文本行的数据,然后处理并显示数据。
语法格式:gawk [参数]
常用参数:

-f从文件程序文件读取AWK程序源,而不是从第一个命令行参数。可以使用多个-f选项
-F指定描绘一行中数据字段的文件分隔符
-v定义gawk程序中使用的变量和默认值
-mr指定数据文件中的最大记录大小

参考实例

  1. 命令行读取程序脚本:
lucky@DESKTOP-VQ8KID4:~$ gawk '{print "hello world"}' nowcoder.txt
hello world
hello world
hello world
hello world
hello world
  1. 指定描绘一行中数据字段的文件分隔符:
lucky@DESKTOP-VQ8KID4:~$ gawk -F: '{print $1}' /etc/passwd | tail
messagebus
syslog
_apt
tss
uuidd
tcpdump
sshd
landscape
pollinate
lucky

题目解决方案

方法一:grep命令

grep命令:-v显示不包含匹配文本的所有行

lucky@DESKTOP-VQ8KID4:~$ grep -v this nowcoder.txt
that is your bag
to the degree or extent indicated.
welcome to nowcoder

方法二:sed命令

找出包含this的行,进行删除,剩下的都是不含this的行了:

lucky@DESKTOP-VQ8KID4:~$ sed '/this/d' nowcoder.txt
that is your bag
to the degree or extent indicated.
welcome to nowcoder

或者找出包含this的行,不进行打印

lucky@DESKTOP-VQ8KID4:~$ sed -n '/this/!p' nowcoder.txt
that is your bag
to the degree or extent indicated.
welcome to nowcoder
  • p:打印指令
  • d:删除指令
  • //:正则表达式

方法三:awk简单正则匹配

lucky@DESKTOP-VQ8KID4:~$ awk '!/this/{print}' nowcoder.txt
that is your bag
to the degree or extent indicated.
welcome to nowcoder

检查$0,当其不包含this时进行输出也是可以的:

lucky@DESKTOP-VQ8KID4:~$ awk '$0!~/this/{print $0}' nowcoder.txt
that is your bag
to the degree or extent indicated.
welcome to nowcoder

方法四:awk配合for循环

定义一个flag变量,来判断每一行是否包含this,不包含输出即可:

awk '{
        flag=0;
        for(i=0;i<=NF;i++){
                if($i=="this"){
                        flag=1;
                }
        }
        if(flag!=1){
                print $0;
                flag=0;
        }
}' nowcoder.txt

方法五:awk配合if条件语句

lucky@DESKTOP-VQ8KID4:~$ awk '{if($0 !~ /this/){print $0}}' nowcoder.txt
that is your bag
to the degree or extent indicated.
welcome to nowcoder

方法六:gawk命令

lucky@DESKTOP-VQ8KID4:~$ gawk '!/this/' nowcoder.txt
that is your bag
to the degree or extent indicated.
welcome to nowcoder

方法七:循环

没啥可说的,一行一行的读,不包含this就进行输出

while read line; do
	if [[ $line =~ "this" ]]; then
		continue
	else
		echo $line
	fi
done <nowcoder.txt

相关文章:

  • wordpress隐藏路径特性/百度推广首次开户需要多少钱
  • 做网站需要哪些素材/店铺数据分析主要分析什么
  • 江西宜春市建设局网站/企业邮箱怎么注册
  • 淮安百度网站建设/优化器
  • wordpress 提速 插件/百度seo和sem的区别
  • 个人网站 可以做论坛吗/网站seo培训
  • 多测师肖sir_高级讲师_第2个月第27讲解jmeter性能硬件指标
  • [Codeforces] combinatorics (R1600) Part.5
  • Python语法(1)- 基础语法,判断语句,循环语句,函数
  • 互联网摸鱼日报(2022-10-15)
  • 2022年了,我才开始学 typescript ,晚吗?(7.5k字总结)
  • 算法 - 查找众数及中位数
  • Hook--2.useRef、useCallback、useContext、useReducer
  • 实例展示如何使用JMeter操作Elasticsearch
  • leetcode 474一和零
  • 2022年全国大学生数学建模美赛E题NPP数据获取
  • UG12.0无法正常启动0xc000007b修复教程
  • Linux入门基本命令的使用。