来源:面包芯语
2023-05-06 17:21:14
今天给大家聊一聊Linux中文本操作的三剑客:awk、grep、sed,因其功能强大、使用频繁,且是Linux下文本处理的得力利器,常被称之为文本三剑客。grep常用于查找,sed常用于取行和替换,而awk常用于运算。
(资料图片)
有句玩笑话常说:做Linux技术不识三剑客,玩遍Linux也枉然,虽然是玩笑语,但也不得不说他们的重要性。
为什么聊起这个话题呢?
示例:
正则表达式应用广泛,在绝大多数的编程语言都可以应用,在Linux中,也有着很大的用处。使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成我们的需求。
格式
我们可以根据grep命令任意组合正则表达式
主要用来自动编辑一个或多个文件, 简化对文件的反复操作
sed是一种流编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容输出。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i。
格式:sed [options] "command" file(s)常用参数:
示例:
sed"="test.txt#显示行号sed"3="test.txt#显示第三行行号sed"/./="test.txt#只显示非空白行的行号sed-n"/./!="test.txt#只显示空白行行号sed"$="test.txt#显示总共有多少行sed-n"2p"test.txt#要加-n,否则会默认自动打印所有内容sed-n"2p"test.txt#要加-n,否则会默认自动打印所有内容#输出指定行sed-n"2,7p"test.txtsed-n"2,7p"test.txtsed-n"2,7{p}"test.txt#替换文件中内容sed-i"s/bck/sh/"test.txttest1.txt#替换test.txt、test1.txt内的bck为sh,每行只替换一个sed-i"s/bck/sh/g"test.txt#替换test.txt内的bck为sh,每行都进行全面替换sed-i"s/bck/sh/3g"test.txt#替换test.txt内的bck为sh,从第3个匹配位置开始替换sed-i"s@bck@sh@g"test.txt#替换test.txt内的bck为sh,每行都进行全面替换sed-i"s#bck#sh#g"test.txt#替换test.txt内的bck为sh,每行都进行全面替换#显示查找内容的行sed-n"/sh/p"test.txt#显示test.txt内的所有包含sh的所有行sed-n"/sh/,$p"test.txt#显示test.txt里第一条包含sh的行及以下到末尾的所有行awk用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。awk其实不仅仅是工具软件,还是一种编程语言。
格式:awk [options] "program" var=value file…awk [options] -f programfile var=value file…awk [options] "BEGIN{ action;… } pattern{ action;… } END{ action;… }" file ...
常用命令选项
示例:
awk-vFS=":""{print$1,$2}"testawk#FS指定输入分隔符awk-vFS=":"-vOFS="---""{print$1,$2}"testawk#OFS指定输出分隔符awk-vRS=":""{print$1,$2}"testawkawk-vFS=":"-vORS="---""{print$1,$2}"testawkawk-F:"{printNF}"testawkawk-F:"{print$(NF-1)}"testawk#显示倒数第2列上述三个命令的功能及参数远远不止本文提到的这些,在此只是罗列了一些常用的功能及参数。这三个命令的功能非常强大,用法及参数和功能也非常的多,我们没必要刻意去记忆,也不可能全部记住,记住一些常用的参数及用法即可。只要当我们有需求时知道用哪个命令然后对应的去查找相关参数用法即可。
关键词: