linux学习:sed与awk与tr用法整理

流编辑器:sed
sed ‘s/pattern/replace_string/‘ file    #从给定文本中的字符串利用正则表达式进行匹配并替换每一行中第一次符合样式的内容
sed ‘s/text/replace/‘ file > newfile    #替换每一行中第一次符合样式的内容并将替换结果重定向到新文件
sed -i ‘s/test/replace/‘ file        #参数-i使用替换每一行中第一次符合样式的内容结果应用于源文件
sed ‘s/pattern/replace_string/g‘ file     #后缀/g意味着会替换每一处匹配,而不是每一行中第一次匹配
sed ‘s:test:rep;ace:g‘          #使用:替换/,这两个符号都是定界符,用其他符号也无所谓,但是当定界符在匹配的样式内部时,需要加\进行转义
sed ‘expression; expression‘        #组合多个表达式
sed ‘/^$/d‘ file             #移除空白行,^$表示空白行,/d表示将匹配的样式移除
echo thisthisthisthis | sed ‘s/this/THIS/2g‘   #后缀/2g表示从第2处开始(包括第二次)开始匹配。第N处,就使用/Ng。结果:thisTHISTHISTHIS
cat file | sed ‘s/pattern/replace_string/‘ file    #从stdin中读取输入并替换每一行中第一次符合样式的内容
echo this is an example | sed ‘s/\w\+/[&]/g‘     #符号&表示已匹配的字符串。正则表达式\w\+匹配每一个单词,并用[&]替换它,结果:[this] [is] [an] [example]
echo this is digit 7 in a number | sed ‘/digit \([0-9]\)/\l/‘ #参数\1(数字1)将digit 7转换为7
---------------------------------------------------------------
text=hello
echo hello world | sed "s/$text/Hello/"    #输出结果HELLO world
---------------------------------------------------------------
文本混乱与恢复正常(替换空格,换行符,制表符等)
cat test.js | sed ‘s/;/;\n/g; s/{/{\n\n/g; s/}/\n\n}/g‘        # s/;/;\n/g将;替换为\n; s/{/{\n\n/g将{替换为{\n\n s/}/\n\n/g将}替换为\n\n}
cat test.js | sed ‘s/;/;\n/g‘ |sed ‘s/{/{\n\n/g‘ | sed ‘s/}/\n\n}/g‘   #同上
sed ‘s/ [^.]*mobbile phones[^.]*\.//g‘ test.txt      #移除文件test.txt中包含单词“mobile phones”的句子

数据流工具:awk
工作方式:awk ‘BEGIN{ PRINT "start" } pattern { commands } END{print "END" } file
首先执行BEGIN语句块,然后从文件或stdin中读取一行,然后执行pattern{ commands }。直到文件全部读取完毕。读到输入流末尾时,执行END{ commands } 语句块。三个语句块都是可选的。如果没有提供pattern语句块则默认打印每一个读取到行。
awk的特殊变量:
NR:表示记录数量,在执行过程中对应于当前行号。
NF:表示字段数量,在执行过程中相对于当前行的字段数。
$NF:表示当前行的最后一个字段。$(NF-1)表示当前行的倒数第二个字段。依次类推
$0:这个变量包含执行过程中当前行的文本内容。
$1:这个变量包含第一个字段的文本内容。
$2:这个变量包含第二个字段的文本内容。依次类推。

awk ‘BEGIN { i=0 } { i++ } END{ print i }‘ filename    #逐行读取文件并打印行数
echo -e "line1\nline2" | awk ‘BEGIN{ print "Start" } { print } END { print "END" } ‘
echo | awk ‘{ var1="v1"; var2="v2"; var3="v3"; print var1"-"var2"-"var3;}‘
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk ‘{ print "Line no:"NR",No of fields:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3 }‘
awk ‘{ print $3,$2 }‘ file   #打印文件中每一行的第2和第3个字段。
awk ‘END{ print NR }‘ file   #统计文件中的行数,只加END语句块表示文件执行到最后一行时再输出行号
awk ‘NR < 5‘ file          #打印文件中行号小于5的行
awk ‘NR==2,NR==5‘ file    #打印文件中行号在2到5之间的行
awk ‘/linux/‘ file        #打印文件中包含样式linux的行(样式可以使用正则表达式)
awk ‘1/linux/‘ file        #打印文件中不包含包含样式linux的行
awk -F: ‘{ print $NF }‘ /etc/passwd #读取并打印/etc/passwd文件的内容,设置定界符为":",默认的定界符为空格
var1=‘test‘; var2=‘text‘                #(1)外部变量
echo | awk ‘{ print v1,v2 } v1=$var1 v2=var2     #(2)打印多个从标准输入传给awk的外部变量
awk ‘{ print v1,v2 }‘ v1=$var1 v2=var2 filename #(3)输入来自文件
cat test.txt | getline output             #将cat的输出读入变量output中。
awk ‘BEGIN { FS=":" } { print $NF }‘ /etc/passwd #BEGIN语句块中则使用FS="delimiter"设置输出字段的定界符
awk ‘{arr[$1]+=1 }END{for(i in arr){print arr[i]"\t"i}}‘ FILE_NAME | sort -rn    #统计每个单词的出现频率并排序
seq 5 | awk ‘BEGIN{ sum=0;print "Summation:" } { print $1"+"; sum+=$1 } END{ print "=="; print sum }‘    #将每一行第一个字段的值按照给定形式进行累加
echo | awk ‘{ "grep root /etc/passwd" | getline cmdout; print cmdout }‘    #通过getline将外部shell命令的输出读入变量cmdout。变量cmdout包括命令grep root /etc/passwdde 的输出,然后打印包含root的行。

awk中使用循环与awk的内建函数
for(i=0;i<10;i++){ print $i; } 或者 for( i in array ) { print array[i]; }
length(string):返回字符串的长度
index(string ,search_string):返回search_string在字符串中出现的位置。
split(string, array, delimiter):用界定符生成一个字符串列表,并将该列表存入数组
substr(string, start-position, end-position):在字符串中用字符起止偏移量生成子串,并返回该子串。
sub(regex, replacement_str, string):将正则表达式匹配到的第一处内容替换成replacement_str。
gsub(regex, replacement_str, string):将正则表达式匹配到的所有内容替换成replacement_str。
match(regex ,string):检查正则表达式是不能够匹配字符串,若能,返回非0值;否则,返回0.

替换工具:tr
echo 12345 | tr ‘0-9‘ ‘9876543210‘ #加密
echo 87654 | tr ‘9876543210‘ ‘0-9‘ #解密
echo "Hello 123 world 456" | tr -d ‘0-9‘ #使用-d将stdin中的数字删除并打印出来
cat test.txt | tr -d ‘0-9‘ #同上
echo "hello 1 char 2 next 3 " | tr -d -c ‘0-9 \n‘ #参数-c是使用补集。删除stdin中的所有数字和换行符之外的字符(这些字符是‘0-9 \n‘这个集合的补集)
echo "this is a test !" | tr -s ‘ ‘ #参数-s压缩多个空格为单个
------------------------------------------------
tr可以像使用集合一样使用各种不同的字符类:
alnum:字母和数字
alpha:字母
cntrl:控制(非打印)字符
digit:数字
graph:图形字符
lower:小写字母
print:可打印字符
punct:标点符号
space;空白字符
upper:大写字母
xdigit:十六进制字符
使用方式:
tr [:class:] [:class:]
例如:
tr ‘[:lower:]‘ ‘[:upper:]‘ #将所有小写字母换成大写字母
----------------------------------------------------

时间: 2024-10-17 06:25:41

linux学习:sed与awk与tr用法整理的相关文章

Linux学习之路-Awk命令

Awk命令 Awk语法: awk [options] –f scriptfile var value file(s) awk [options] 'script' var=value file(s) 其中'script' 由pattern{action}组成 pattern包括以下几种: u  正则表达式 (例 /^a/{action}) u  关系表达式(例'$1 > 5'或'$1 == "abc"'用运算符表中的关系运算符进行操作) u  模式匹配表达式(用~匹配和~!不匹配

Linux命令----sed和awk

sed -n :加上-n参数后,只有经过sed特殊处理的哪一行或者动作才会被列出来. 动作说明:[n1,n2[function]] function : a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行) c:取代,c的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行 d:删除,d后面通常不接任何东西; i:插入,i后面可以接字符串,而这些字符串会出现在新的一行(目前的上一行) p:列印, s:取代,可以直接进行取代的工作,通常这个s的动作可以搭配正则表示法

Linux结合sed和awk打印文件权限

问题: 过滤出stat /etc/hosts的权限值 法1: [[email protected] ~]# stat /etc/hosts|sed -n '4p'|awk -F '[0/]' '{print $2}' 644 注: Awk里的[0/]表示 Access: (0644/-rw-r--r--) 法2: [[email protected] ~]# stat /etc/hosts|awk -F '[0/]' 'NR==4 {print $2}' 644 法3: [[email prot

Linux学习—sed

sed--一种流编辑器,也是Linux操作系统功能强大的使用工具之一.sed不面向屏幕.非交互式.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出.sed通常用来匹配一个或多个正则表达式的文本进行处理.这种编辑器非常适合执行重复的编辑操作. 目录 sed简介(模式空间和保持空间) 语法格式及选项 地址定界和编辑命令 高级编辑命令 sed支持正则表达式的元字符集 案例 一.sed简介(模式空间和保持空间) sed按顺序逐行读文件到名为模式空间的临时缓存中,然后对该行执行相应

linux学习记录——sort,uniq,wc,tr

文本排序:sort xx 升序 -n 升序 按数值大小 -r 降序 -t 指定字段分隔符 -k 指定以哪个字段为关键字排序   sort -t:  -k3 /etc/passwd -u 排序后相同的行只显示一次 -f 忽略大小 uniq 判断是否重复的行.(相邻并且完全相同的行才能算重复的行) 因此可以先用sort排序再uniq -d 只显示重复的行. -D 显示所有重复的行. -c 显示每一行重复的次数 (类似于sql的group by + count ) wc 文本统计 word count

每日linux命令学习-sed

Linux的文本处理实用工具主要由sed和awk命令,二者虽然略有差异,但都使用正则表达式,默认使用标准I/O,并且使用管道命令可以将前一个命令的输出作为下一个命令的输入.笔者将在本节学习sed命令. sed命令 sed命令是以行为单位的非交互式编辑器,从通过标准输入或文件获得要处理的输入文本,对指定的行进行逐行处理,然后将结果输出传送到标准输出或文件.sed命令也可以在vi(m)编辑器中使用.sed决定对指定地址范围内的哪些输入行进行处理,此时可在地址范围内使用行号或正则表达式模式.例如,5d

linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

一:特殊符号用法整理 算术比较-eq 等于-ne 不等于-gt 大于-lt 小于-ge 大于或等于-le 小于或等于-a 逻辑与 and &&-o 逻辑或 or ||[ $var -eq 0 ]    #当$var等于0时,返回真[ $var -ne 0 ]    #当$var为非0时,返回真[ $var1 -ne 0 -a $var2 -gt 2 ][ $var1 -ne 0 -o $var2 -gt 2 ] 字符串比较[[ $str1 = $str2 ]]     #当str1等于st

Linux文本三剑客超详细教程---grep、sed、awk

awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理. 1.grep 1.1 什么是grep和egrep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红).grep全称是Global

linux学习之路之sed命令使用

本章主要介绍sed的命令使用 sed(Stream Editor)是一种流编辑器,或者叫做行编辑器,以行为单位进行编辑处理,而后续会介绍的vi编辑器是一种全屏编辑器. sed的工作原理: 逐行读取文件中的每一行,并将其放在内存空间中,在对内存空间中的数据进行处理,将处理后的结果打印到屏幕上.而这种内存空间也叫做模式空间. 所谓模式空间:就是将放在内存空间的数据根据模式来匹配,匹配成功的数据进行相应的编辑处理,将处理后的数据打印到屏幕上去. 说明:sed命令默认将文件中所有的行打印到屏幕上去. s