Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sed , grep , awk命令 #11

Open
ZSI2017 opened this issue Aug 15, 2018 · 0 comments
Open

sed , grep , awk命令 #11

ZSI2017 opened this issue Aug 15, 2018 · 0 comments
Labels
shell shell命令

Comments

@ZSI2017
Copy link
Owner

ZSI2017 commented Aug 15, 2018

sed 是一种流编辑器,文本处理中常用的工具,通常情况下,会把当前处理的行存储在临时缓存区中,最后将处理结果输出到终端,所以通常不会改变原文本的内容。
常用操作备忘:

  1. 替换文本中的字符串: sed 's/book/books.' file
  2. 直接编辑源文件: sed -i 's/book/books/g file'
  3. 删除操作: sed '2,$d' file 删除第2行到末尾
  4. 分隔符: sed 's#book#books#g example' 紧跟在s 命令后的都可以被认为是新的分隔符,
  5. N命名: sed 'N;s/book/books/g file' 把原文本中的下一行,也就是偶数行,放在缓存区做匹
    配。相当于两行合并到一起进 行匹配。最后的效果就是 lin1 \n lin2
  6. a, i 命令: a 命令就是 append, i 命令就是insert
  7. p: sed -n '/book/p' file看成grep来使用, 结合 -n 参数一起使用。 就可以打印匹配的那一行。
  8. :a ,ta, 这对符号中 :a 是先做一个标记,然后 如果 ta 之前执行成功,则跳转到 :a 标识继续循环执行。相当于c 语言中的goto 语句。
    具体可以 删除文本中所有的 /n, 结合刚才的N 命令, sed ':a;N;s/\n//;ta' 1.txt ,通过; 进行分割,可以同时执行多个命令。

grep 用于查找文件中符合条件的字符串。查找成功,会把那 一行显示出来。 如果后面没有指定文件,就会从标准输入中读取数据,或者经常用到 查看服务的命令 ps -ef | grep nginx , 就可以在所有的服务中,筛选出nginx 服务。

  1. 基本查找: grep width 1.css 在命令行输出1.css 文件中包含 'width' 字符串的行
    2 .递归查找: grep -r width ./ 在当前文件目录下,递归查找所有的子目录,找到包含‘width'的文件,已经文件中对应的行内容。
  2. 反向查找: grep -v width 1.css 打印导出1.css 文件中,不包含‘width’的行。通常用来筛选出log.
  3. 不显示任何形象: -q 不显示任何信息 。 效果 等同于 grep width 1.css > /dev/null , 利用输出重定向到 /dev/null, 这个文件代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失

awk 一个强大的文本分析工具,将文件逐行读入,并且每一行都以空格或者tab进行分割,可以对分割后的字段,利用$1,$2... 获取到,进行分析。

  1. 指定域分割符: -F命名 awk -F: ‘print{$1}’ filename 指定分割符为‘:’ ,并打印出:前面的内容。
    比如:
    cat 1.css
    width: 100px;
    height: 200px;
    awk -F ':' '{print $1}' 1.css
    width
    height
    也可以使用多个分割符, awk -F '[,:]' '{print $1}' 这里表示先用‘;’进行分割,然后再使用‘:’进行分割。

  2. 设置变量: -v awk -va=1 '{print a}' 1.css

  3. 直接使用脚本文件: awk -f scriptfile filename;

  4. 内建变量:

    • $n 当前记录的第n 个字段;
    • $0 完整的输入记录
    • NF 一条记录的字段的数目
    • NR 当前记录的行号 (从1开始)
    • RS 记录分割符(默认是一个换行符号)
      ...
      打印出偶数行数据:
      awk 'NR % 2 == 0' filename
  5. awk脚本:

    • BEGIN {第一行记录前执行的语句}
    • {处理每一行要执行的语句}
    • END {所有行执行后要执行的语句}

    使用BEGIN 和 END
    cat 1.css
    width: 100px;
    height: 200px;
    awk -v a= 'single' 'BEGIN {print a} {print $1} END {print 'end'}' 1.css
    single
    width:
    height:
    end

@ZSI2017 ZSI2017 added the shell shell命令 label Aug 15, 2018
@ZSI2017 ZSI2017 changed the title sed 命令 sed grep , awk命令 Aug 18, 2018
@ZSI2017 ZSI2017 changed the title sed grep , awk命令 sed , grep , awk命令 Aug 18, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
shell shell命令
Projects
None yet
Development

No branches or pull requests

1 participant