Shell-常用指令使用详解

常用指令使用详解

By timebusker on June 29, 2018

IFS的默认值为:空白(包括:空格,制表符,换行符).

【SED】

sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

  • 处理过程: 首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。 sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。

  • 标准命令格式: sed 'sed命令' input_file > result_file

# 定址:指定操作行号,地址是一个数字,则表示行号;是 $ 符号,则表示最后一行。
# 只打印第三行
sed -n '3p' datafile  
# 打印第三行至第10行
sed -n '3,10p' datafile 

# 删除第二到第五行
sed '2,5d' datafile


【AWK】

awk把文件逐行的读入,以空格为(默认)分隔符将每行切片,切开的部分再进行各种分析处理。

awk 命令的基本格式:awk [options] 'program' file

  • options 这个表示一些可选的参数选项
  • program 这个表示 awk 的可执行脚本代码,这个是必须要有的。
  • file 这个表示 awk 需要处理的文本文件

  • sed命令的选项(option):

    -n :只打印模式匹配的行 -e :直接在命令行模式上进行sed动作编辑,此为默认选项 -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作 -r :支持扩展表达式 -i :直接修改文件内容

awk 内置变量的使用

$0 这个表示文本处理时的当前行 $1 表示文本行被分隔后的第 1 个字段列 $2 表示文本行被分割后的第 2 个字段列 $3 表示文本行被分割后的第 3 个字段列 $n 表示文本行被分割后的第 n 个字段列 NR 表示文件中的行号,表示当前是第几行 NF 表示文件中的当前行列的个数,类似于 mysql 数据表里面每一条记录有多少个字段。 FS 表示 awk 的输入分隔符,默认分隔符为空格和制表符,你可以对其进行自定义设置 OFS 表示 awk 的输出分隔符,默认为空格,你也可以对其进行自定义设置 FILENAME 表示当前文件的文件名称,如果同时处理多个文件,它也表示当前文件名称

# 实例

# 把文件/etc/passwd的每一行以空格切割输出当前行
awk '{print $0}' /etc/passwd

# awk 自定义分隔符
# 把文件/etc/passwd的每一行以冒号切割输出第一字段列
awk -F ':' '{print $1}' /etc/passwd

# 同时指定多个分隔符
# 以:和空格切割输出第一、二、三字段列
awk -F '[: ]' '{print $1, $2, $3}' /etc/passwd

【GREP】

grep(global search regular expression(RE) and print out the line, 全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。