linux三剑客

admin 2024年10月15日12:49:42评论5 views字数 2898阅读9分39秒阅读模式

Linux三剑客 #

文本分析AWK #

awk是一种编程语言,是一个文本处理工具,是一个强大的命令行解释器,用于在linux/unix下对文本和数据进行处理 ;awk 可以执行一系列的操作,包括从文件或管道中读取文本数据、解析文本中的字段和行、过滤和转换数据、执行计算和打印结果等。它是一种灵活的工具,可以通过编写脚本来控制其行为和操作。

awk 的名称来自于它的创建者 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏的首字母。

数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出;

它支持用户自定义函数和动态正则表达式;

awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势

基本语法: #

awk [options] 'Pattern{Action}' filename
command [选项 参数] '模式{动作}'   文件

12

其中:

  • pattern:是一个正则表达式,用于匹配文本中的特定行或数据。
  • action:是在匹配到 pattern 时要执行的一组命令。
  • file:是要处理的文本文件的名称或从标准输入读取的数据。

常用命令选项: #

-F fs#fs指定命令分隔符,如 -F:  如果没有指定分割符,默认使用空格作为分隔符(或使用-v FS,FS是内置变量)
-v var=value#赋值一个用户定义变量,将外部变量传递给awk,比如使用-v OFS="+",指定输出分隔符
-f script#从脚本文件中读取awk命令

123

最简单的用法:只用action #

$ echo "hello world" > test
$ awk '{print}' test
hello world
$ awk '{print $0}' test#$0表示所有域(默认用空格当作分隔符)
hello world
$ awk '{print $1}' test#$1表示第一个域,两个域用逗号隔开$1,$2,去掉逗号或换为空格输出时会没有分隔符显示在一列
hello
##############################
df -h | awk '{print $5}'#df显示磁盘使用情况,这里使用awk只打印每行的第五列,$NF可以只输出每行的最后一列

123456789

特殊模式的用法: #

BEGIN 模式指定了处理文本之前需要执行的操作:(BEGIN开始);不指定文件也能输出(但是后边指定操作也会卡住)

END 模式指定了处理完所有行之后所需要执行的操作:(END结束);不指定文件会卡住

$ awk 'BEGIN{print "wintrysec"} {print $0} END{print "1080"}' test
wintrysec
hello world
1080

1234

AWK变量: #

常用内置变量:

FS#输入字段分隔符, 默认为空白字符
OFS#输出字段分隔符, 默认为空白字符
RS#输入记录分隔符(默认输入是换行符), 指定输入时的换行符
ORS#输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF#number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR#行号,当前处理的文本行的行号。
FNR#各文件分别计数的行号,另一个文件从1开始计行数
ARGC#命令行参数的个数
ARGV#数组,保存的是命令行所给定的各参数,AGRV[0]是awk
FILENAME#当前文件名

12345678910

自定义变量的两种用法:

$ awk -v name="wintrysec",age=19 'BEGIN{print name}'#第一种方法用-v选项,多个参数用逗号分隔   不加BENGIN会卡住
wintrysec
$ awk 'BEGIN{name="wintrysec";age=18;print name,age}'#第二种方法,直接在程序中定义,多个参数用分号分隔 
wintrysec 18

1234

举例 #

例如,如果你想要从一个名为 example.txt 的文件中提取第二列(使用空格作为分隔符),可以使用以下命令:

awk '{print $2}' example.txt

1

如果您想要计算文件中第一列的总和,则可以使用以下命令:

awk '{sum += $1} END {print sum}' example.txt

1

这将把第一列的值相加,并在处理完整个文件后输出总和。

文本批量处理sed #

sed -- Stream EDitor

主要用来自动编辑一个或多个文件;简化对文件的反复操作;

命令格式: #

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

12

常用选项: #

-e<script>#以选项中的指定的script来处理输入的文本文件;
-f<script文件> #以选项中指定的script文件来处理输入的文本文件;
-n#仅显示script处理后的结果;

123

替换标记: #

g#表示行内全面替换;即替换每一行中的所有匹配
p#表示打印行。  
w#表示把行写入一个文件。  
x#表示互换模板块中的文本和缓冲区中的文本。  
y#表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\1#子串匹配标记
&#已匹配字符串标记

1234567

常用命令: #

d 删除,删除选择的行。
s 替换指定字符
p 打印模板块的行。
P(大写) 打印模板块的第一行。

常见用法: #

替换文本中的字符串 (如linux日志处理,伪造IP)

sed -i 's/192.168.1.3/192.168.1.4/g' xxx.log#-i选项表示直接编辑文件

1

定界符:

以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符:

sed 's|test|TEXT|g'

1

定界符出现在样式内部时,需要进行转义:

sed 's/\/bin/\/usr\/local\/bin/g'

1

删除操作(d命令):

sed '/^$/d' file#删除空白行
sed '2d' file#删除文件的第二行
sed '2,$d' file#删除文件的第2行到末尾所有行
sed '$d' file #删除文件最后一行
sed '/^test/'d file#删除文件中所有开头是test的行

12345

常见面试题 #

把/oldboy目录以及子目录下所有以扩展名为.sh结尾的文件包含oldboy的字符串全部替换为oldgirl

find /oldboy -type f -name "*.sh"|xargs sed "s#oldboy#oldgirl#g"

1

grep文本正则匹配 #

grep#正则匹配,搜索文本."Global Regular Expression Print"这是一个用于在文本中查找和过滤匹配字符串或正则表达式的命令.帮助用户快速定位关键信息。
常见用法:

grep "text" file_name#返回一个包含text的文本行
grep "text" file1 file2#在多个文件中查找
grep -v "text" file_name#-v选项,输出排除text之外的所有行
grep -E "[1-9]+"#-e选项,使用正则表达式
grep -c "text" file_name#统计文件中匹配字符串的行数

12345 - source:wiki.wgpsec.org

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月15日12:49:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   linux三剑客https://cn-sec.com/archives/3271055.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息