该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令。
刷题链接:牛客题霸-Shell篇。
该系列文章都放到专栏下,专栏链接为:《专栏:Linux》。欢迎关注专栏~
本文知识预告:
- 本文首先总结了
awk命令中的各个内置函数的用法; - 然后给出了五种题目的解决方法,需要使用到之前学习到的正则表达式。
题目:SHELL15 去掉不需要的单词
写一个bash脚本以实现一个需求,去掉输入中含有B和b的单词。假设输入如下:
big
nowcoder
Betty
basic
你的脚本获取以上输入应当输出:
nowcoder test
说明:你可以不用在意输出的格式,空格和换行都行
相关命令学习
awk:文本和数据进行处理的编程语言
awk命令来自于三位创始人”Alfred Aho,Peter Weinberger, Brian Kernighan “的姓氏缩写,其功能是用于对文本和数据进行处理的编程语言。使用awk命令可以让用户自定义函数或正则表达式对文本内容进行高效管理,与sed、grep并称为Linux系统中的文本三剑客。
语法格式:awk 参数 文件
常用参数:
| 参数 | 功能 |
|---|---|
-F |
指定输入时用到的字段分隔符 |
-v |
自定义变量 |
-f |
从脚本中读取awk命令 |
-m |
对val值设置内在限制 |
常用的awk内置变量:
awk语法由一系列条件和动作组成,在花括号内可以有多个动作,多个动作之间用分号分隔,在多个条件和动作之间可以有若干空格,也可以没有。
| 变量名称 | 说明 |
|---|---|
FILENAME |
当前输入文档的文件名 |
FNR |
当前输入文档的当前行号,尤其当多个输入文档时有用 |
FS |
设置字段分隔符,默认为空格或制表符 |
NF |
当前记录(行)的字段(列)个数 |
NR |
输入数据流的当前记录数(行号) |
OFS |
输出字段分隔符,默认为空格 |
ORS |
输出记录分隔符,默认为换行符 |
RS |
输入记录分隔符,默认为换行符 |
awk是一种处理文本文件的编程语言,文件的每行数据都被称为记录,默认以空格或制表符为分隔符,每条记录被分成若干字段(列),awk每次从文件中读取一条记录。
例子:
- 仅显示指定文件中第1、2列的内容(默认以空格为间隔符):
lucky@DESKTOP-VQ8KID4:~/shell$ awk '{print $1,$2}' nowcoder.txt
#include <iostream>
using namespace
int main()
{
int a
int b
cout <<
return 0;
}
- 以冒号为间隔符,仅显示指定文件中第1列的内容:
lucky@DESKTOP-VQ8KID4:~/shell$ awk -F : '{print $1,$2}' /etc/passwd
root x
daemon x
bin x
...
tcpdump x
sshd x
landscape x
pollinate x
lucky x
/etc/passwd文件中的内容由:分隔开。
- 以冒号为间隔符,显示系统中所有UID号码大于500的用户信息(第3列):

本文深入介绍了awk命令的使用,包括内置变量、函数以及正则表达式的应用。通过实例展示了如何删除含有特定字符的单词,如去除输入中的'B'和'b'。文中还对比了sed和grep命令的用法,帮助读者更好地理解和掌握文本处理工具。

2358

被折叠的 条评论
为什么被折叠?



