linux命令的选项和选项后面的值的方式: 如果用 短选项, 选项值就放在短选项的后面, 如果用长选项, 值就用等于的方式. 最重要的是, 短选项后面的值, 跟短选项之间, 可以用空格, 也可以紧接着写, 系统是可以时别的, 因为只要看到一个短线, 就把后面的那个字符解析为选项名称, 然后再后面的内容, 即使是紧接着的, 也把它解析为 选项的值....

:::: sed: stream edit, 其实就是 vim/vi的流编辑器. 你可以就把它看成是vi/vim, 只是它没有插入/normal/visual的模式, 它就等于vim的 命令模式, 如同 :set nu等这种方式, 因此, 在vi/vim的命令行可以使用的功能/命令等等, 在 sed中都可以使用, 主要是指 底部的命令模式 中可以使用的 "正则表达式(所以功能强大)"可以使用的 搜索/删除/替换/更改等操作都可以. 换句话说, 凡是在vi中可以使用的 搜索, 替换, 等正则表达式操作, 在sed中都是可以使用的, 因为, 它就是一个 vi/vim.

sed 参考: http://blog.csdn.net/tsuliuchao/article/details/8064702

  • y命令是对应位置的字母替换, 注意, 不一定在文本中是命令中那样的位置对应关系, 是指, 先在y命令中就已经规定了这样的对应替换后, 在实际文本中, 只要是符号替换字符的, 不管它的位置是怎样的, 在哪里, 都这样替换! 如: sed 'y/012/abc/'

  • 注意, 在替换s, y命令中, 最后 一定 要加上 最后的那个 斜杠, 否则, 会出错!! 而且, 其中的空格要严格控制:

  • y是对应的字符 替换, 是字符列表的对应替换, s是 多个字符组合的替换

  • 再也不会记不住单词的 搜索了: 在vim 的命令中, 正则表达式中 , (), [], {}, 都是具有特殊意义的符号, 而 表示单词的界定 范围 用 尖括号 < >, 由于< > 是特殊意义, 所以 ,要用转义符号: <, > 分别来表示 单词的 开头和结尾 .

  • 要注意, 匹配整个单词用<>, 而^, 和$ 是匹配一行的 开头和结尾, 是一行的开头, 不是 一个单词..

  • 在sed中, $ 表示整个文件的最后 一行, 不是一行的结尾, 实践表明, 命令中的 引号可以用单引号, 也可以用双引号, 也可以不用引号, 而且引号还可以放在中间, 总之, 引号的使用是非常灵活自由的, 当然最好还是用 单引号括起来, 因为在其他的系统不知道会是怎样的

在 cut, awk(就是行编程器, 以BEGIN {...} {...} END{...}) , sed中, 注意两个问题, 一是, 命令都要 写在 单引号中, 二是, 命令要用 大括号括起来...


要注意把握问题深入的程度...

  1. 这些命令都是以 "文本" 为操作对象, 为处理对象的, 不像 find ls 等是以文件为操作对象
  2. 是以"行"为单位进行处理的
  3. 操作的结果和目的不同:

    cut一般用于提取, awk一般用于分析.sed用于编辑.
  4. 但是它们的原理却基本相同的:

    都是从文件中, 根据"\n"换行切断,提取行来处理.

    都是将行 根据 delimiter 分割成域, 然后对一个一个的域进行操作: 很明显: $1是第一个域,..., $0是所有域.

但是, 各个命令切割域的选项有所不同: cut: -d, awk: -F fs. (-f是用理论指定awk脚本文件的)

cut是从" 文件" 包含的 文本 行中 "提取" 内容. 注意是 提取, 原来的文本 文件没有影响.

=cut的使用方法===============

Usage: cut [OPTION]... [FILE]...

选项:

-d: delimiter, 是定义分隔符号, 默认的是tab 空格. [注意这个时指源文件中的各个"域"要分隔的符号]

-f: field, 指定要提取的是哪些"域" "单元", "部分"

-c: char, 指定要提取的字符范围.

(指定域, 字符等范围时, 要表示连续的话, 使用"-", 要表示分开的, 独立的,单个单个的, 用","省略范围的开头和结束, 默认的就是1,和结尾)

选项后面的内容可以跟-d -c -f这些挨着写, 也可以隔开写

cut的用法也确实很简单, 主要就是上面的这几个参数:



注意--output-delimiter这个选项, 可以设置输出内容的定界符. 这个也更说明了上面的那个-d选项...

(注意区别: limit和delimit的差别:

limit主要是限制/上限等意思

delimit主要是用来 表示 "界定"的 范围的意思.

界定符 不能用 divide separate. 这俩个 真的是把东西 割开, 切开.
**但是也有用separator的, 如awk中, 它那个表示把这些域分割开来, 进行数据分析**

)

设置 shell为 read-only后, 就相当于把shell锁定了, 你就不能再输入内容了.

===============================================================

联想真伪查询

  1. 查看笔记本D面的标签上的sn和bios的是否一致,
  2. 网上查询: http://support.lenovo.com.cn/lenovo/wsi/index.html, wsi: warranty and service index?

    点击: lenovo笔记本, 然后查询服务, 就可以输入sn号, 如果显示有详细的产品信息,并且有保修信息的...

::: 输入序列号后, 如果是正品, 则会显示生产日期和保修日期. 如果是水货, 就会提示,找不到输入的序列号电脑信息...

一直使用firefox浏览器, 熟悉其快捷操作:
查看历史: ctrl+h, 而且是按照字母顺序进行排列的, 还可以搜索
书签: ctrl+b(bookmark), 而且bookmark this page: ctrl+d , bookmark vt. 做...书签
在标签之间切换: ctrl+tab 注意不是ctrl+t: t是字母键, tab是跳格键. film: n. v. 拍电影:
zoom in 放大, in(向 容器 ... 里面加)
zoom out 缩小 out(从 容器...拿出来).
film the whole building first, then zoom in on the door.

====================== awk的使用方法 ===========================

只掌握基本的使用方法即可以了!

参考这篇文章很好: http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

     awk编程

 变量和赋值

除了awk的内置变量,awk还可以自定义变量。

下面统计/etc/passwd的账户人数

awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
user count is 40 count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。 这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:
复制代码 awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd
[start]user count is 0
root:x:0:0:root:/root:/bin/bash
...
[end]user count is 40 复制代码 统计某个文件夹下的文件占用的字节数 ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
[end]size is 8657198 如果以M为单位显示: ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}'
[end]size is 8.25889 M 注意,统计不包括文件夹的子目录。 条件语句 awk中的条件语句是从C语言中借鉴来的,见如下声明方式:
复制代码 if (expression) {
statement;
statement;
... ...
} if (expression) {
statement;
} else {
statement2;
} if (expression) {
statement1;
} else if (expression1) {
statement2;
} else {
statement3;
} 复制代码 统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹): ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}'
[end]size is 8.22339 M

使用方法:

awk [OPTION]... 'PATTERN ACTION ' [FILE] ...

重要的一点是: option可以不加引号, 而pattern和action=(program) 一定要加 单引号. 里面的引号一般用双引号...

一个重要的概念是: 这里的program={pattern || action}, 只要有其中一个都可以!

+ awk 默认的是读取standin, 所以你可以在最后面带处理文件, 也可以用cat 给awk提供处理文本流
+ 默认的输出是到 stdout, 也可以重定向
+ 但是, 一定要有program, 命令要求的: 可以只有action,没有pattern; 也只有pattern, 没有action, 这时候,默认的就是输出pattern匹配的结果; 但是如果既没有pattern 也没有action, 则不会输出内容, 而只是提示awk的用法!

  • {ation}中的 program执行顺序: 先执行 一次 'BEGIN {print "...."};', 然后循环执行中间 '{print ...};' 最后执行 一次 'END {print ...}'
  • program 中是C 语言的语法, 所以只要是C 语言的语法都可以.

awk是三个创始人的名字, 是" style scanning and processing language" 样式/模式扫描和处理语言.

如:

  1. awk -F: '{print $1}' /etc/passwd
  2. awk -F: '/root/' /etc/passwd
  3. awk -F: 'BEGIN {print "user uid command"} {print $1 "\t" $3 "\t" $6} END {print "end end end "}' /etc/passwd

要注意 BEGIN和END必须要全部大写才会执行, 否则它们的语句 会忽略, 不会执行.

=======================================================


查看部分内容时, 可以使用head, tail等命令来截取, 但是要之一附带产生的一个问题: 你可能就看不到开头或结尾 输出的内容了. 这个特别是在 输出 要查看 标题头部(页头) 或 页脚的时候, 容易带来 "困惑"?? 如上所示.

=======================================================

awk是gawk的一个软链接文件:

=============================================================

为什么插线板没有按下开关按钮时, 两根线都使电笔亮, 而按下开关时, 则只有一根线使电笔亮, 另外一根线不亮.

原因是:

  1. 墙上的插座线 接反了. 正确的应该是 "左零右火".
  2. 插板线接反了/
  3. 是不是 插线板上的 "两片"插头 插在 插座上的方向 反了? 可以想象, 如果插板 右边 接开关的那根线 通过两片 插头 接在墙上的插座

    的零线上了.

!! 所以, 在现实生活中, 最好是使用 "三片" 插头. 因为三线插头的方向是限定死了的, 不会插反. 并且在 自己手动连接 "三片" 插头时, 也要注意让开关出来的线 默认为 "右边火线" 接在右边的插片上.

!! 如果是 "两片" 插头, 那么反过来插一下就好了.

这种情况, 只有在插板上 有指示灯电路 时, 才会出现. 这是由于 带电的 "零线" 通过 指示灯 "感应" 出电压, 而接通开关 时 , 由于发光二极管上有电压降,从而 感应电压消失到零线的电压0. 所以就不亮了.

=============================================================

联想电脑笔记本, f2 进bios, f12选择临时引导设备

使用 unix风格的选项时, 选项的内容可以紧跟着这个"单字母"的选项, 中间可以不用空格

awk是完全和c语言的编程相同, 只是像if, for等结构体, 包括 所有的program的内容 都要放在单引号的大括号 中:

awk -F: '{ if(...){...} }' file

一般program的结构是三段式: BEGIN{用来初始化自定义变量, 打印标题头...} ; {中间处理语句体...} END {最后输出结果语句体}

===========================================================

sed的使用方法, 参考这篇文章较好: http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html

其实也是很简单的, 使用sed --help和man sed的解释也很简单的, 如后图所示.

首先要明白, 为什么要使用sed?

sed是对文本文件的内容进行编辑修改, 可以进行修改, 替换, 删除, 读外部文件合并, 插入内容等等.

那跟vi有什么区别? vi也可以进行这样的编辑.

  1. sed通常适用于较小的文件, 通常跟cat命令联合使用...

  2. sed命令的使用更直观, 更直接, 更快捷.不用去打开文件 去编辑等等, 比如我要删除文件中的最后10行, 使用一条命令: tac filename | sed '1,10d' | tac > filename就ok了, 比你用vi去编辑的话更快 更直接. 所以, 以后, 能够用sed命令编辑文件的话, 首先就要想到使用sed命令.

  3. 更重要的是, sed命令是基于某种规则, 如查找正则表达式, 对文本内容进行编辑的.是先过滤, 然后进行编辑

  4. sed是对文件的输出拷贝 文本流进行编辑显示, 而vi是直接对源文件进行编辑...

掌握几个原则:

  1. 也是通过\n对文件进行行分割, 然后对文本流进行以行为单位的编辑

  2. 同样的, 这个sed修改也只是对文本流拷贝进行编辑对源文件并不会产生修改, 如果要对原文件进行修改, 使用-i选项. 或者,使用sed后, 再用重定向到原来的文件,如: sed .... file > file

  3. 格式: sed [option...] '[位置/行数范围] 编辑命令' file. 这里最重要的是, 中间的 '行数 编辑命令'一定要加 单引号.

  4. option: 有: -r, -n, -e同时执行多个命令等等. 编辑命令包括: 替换s, 删除d, 插入i/追加a, 修改c(修改某行,就相当于先将该行删除, 然后插入新的内容), 读取文件r, 写出到文件w.

  5. 编辑命令并不是单独的一个字母命令, 通常会包含后面的操作内容等.

  6. sed命令中的行数范围addr1, addr2有多种表示方法: addr1~step || addr1, +N || 而且addr1 总是被接受! 即使addr2比addr1 在更前面. 但是注意, address不能接受负数的地址行数, 所以, 如果要对文件 最后n行进行操作, 但是又不知道 n具体是多少的时候, 就可以用tac将 文件内容反过来显示, 然后进行处理.

=============================================================

终于明白了tac的作用?

  • 在linux中, 有一种思想, 可以对文本流进行操作, 输出到终端的文本内容仍然具有重要意义,可以对这些终端的文本流 文字内容进行重定向
  • tac就是将输出到终端的文本流进行 倒序 排列 显示. 这个通常来说没有什么意义, 因为没有人会反过来阅读
  • 那么, tac的作用主要是用在: 某些shell命令在处理文本流进行指定 行数范围的时候, 不好从最后行向前面数起, 计算, 而只有/方便于 从前面第一行开始计算的情况下, 就用tac显得很重要很有用了: 如用sed 删除最后10行, 最后10行, 的位置范围如何指定? 不好指定, 所以就用tac 翻转, 然后sed '1,10d' ....就好处理了.
清空文件:

file, : 表示空命令, 表示执行成功, 返回0

非标准输出重定向, 如: echo 111 2>file 也可以清空文件

或用非常规i手段: find > file 也可以清空文件.

为什么名 cat file > file; sed/cut '...' file >file; ls file> file 等操作会将文件file清空?

  1. 本身并不是cat , vi等命令将文件清空了的, 而是重定向操作 清空了文件;
  2. 要知道上述命令的执行顺序: 凡是命令中有重定向的, 首先就要将文件清空, (目的是先准备好文件, 后面的操作直接就往文件中写就是了, 不会引起麻烦和冲突), 然后再执行前面的cat或vi命令
  3. 所以, 这个时候执行cat, sed cut等命令的时候, 实际上file已经是空的了, 所以你也就看不到任何东西, 同时你看到的结果是file文件被清空.

!! 但是, 也不能用 >> 符号来操作同一个文件, 会报错:

=======================================================

sed命令的 pattern space是什么意思?

sed在处理文件的时候,每一行都需要存放在一个叫“模式空间”的临时缓存区!每处理完一行,便清理一次(pattern space),并把下一行再次放入!

而保留空间(hole space),是当sed用到h命令的时候,把匹配的模式放在一个叫做"hold buffer"的保留缓冲里,但需要使用G(sed的取得命令)的时候,sed 从这个保留空间(hold space)中取得(G),....

pattern space相当于车间sed把流内容在这里处理

hold space相当于仓库,加工的半成品在这里临时储存

无法绕开的cut, awk, sed命令的更多相关文章

  1. awk sed 命令

    awk awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大. 简单来说awk就是把文件逐行的读入,以 空格或TAB 为默认分隔符 将每行 ...

  2. [Shell]字符截取命令:cut, printf, awk, sed

    ------------------------------------------------------------------------------------------- [cut命令] ...

  3. Linux进阶命令-sort、uniq、 cut、sed、grep、find、awk

    命令难度总体来说有简入难,参数都是工作中常常用到的.如果涉及到一些生僻的参数还请百度或man一下. sort(参考学习网站:http://www.cnblogs.com/dong008259/arch ...

  4. Linux中的高级文本处理命令,cut命令,sed命令,awk命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields    ## 用于有特定分隔字符 [r ...

  5. linux中cut、printf、awk、sed命令

    cut.printf.awk.sed在linux中都是用来处理文本的命令,接下来一个一个看. 一.cut命令 cut [选项] 文件名 选项: 主要使用一下两个参数,若是只使用 -f 则默认的分割符为 ...

  6. 截取命令cut命令、awk命令、sed命令

    cut命令 截取以制表符tab为分隔符的第一列 cut -f 1test.txt 截取以":"为分隔符的第一列,如果比较规律的文件,可以自己设定分隔符 cut -f 1 -d ': ...

  7. Linux高级命令-sort、uniq、 cut、sed、grep、find、awk

    sort(参考学习网站:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html) 功能:根据不同的数据类型进行排序 格式:s ...

  8. 处理海量数据的grep、cut、awk、sed 命令

    grep.cut.awk.sed 常常应用在查找日志.数据.输出结果等等,并对我们想要的数据进行提取. 通常grep,sed命令是对行进行提取,cut跟awk是对列进行提取 处理海量数据之grep命令 ...

  9. Linux查找命令:grep,awk,sed

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

随机推荐

  1. [集合]Map的 entrySet() 详解以及用法(四种遍历map的方式)

    Entry 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也 ...

  2. oracle管理基础知识

    1.oracle的安装 win下 linux下 2.内存和后台进程=实例 为何将oracle做的如此复杂呢 1.内存: --提高查询速度 --提升处理数据的速度 2.后台进程 --为了完成特定的服务, ...

  3. Javascript高级面试

    原型 异步 一.什么是单线程,和异步有什么关系 单线程:只有一个线程,同一时间只能做一件事原因:避免DOM渲染的冲突解决方案:异步 为什么js只有一个线程:避免DOM渲染冲突 浏览器需要渲染DOM J ...

  4. Java——BufferedImage操作实例

    通过鼠标位置改变图像ColorModel对象索引,从而实现图像像素自动变化 BufferedImage 由图像数据的 ColorModel 和 Raster 组成.Raster 的 SampleMod ...

  5. [项目实战]训练retinanet(pytorch版)

    采用github上star比较高的一个开源实现https://github.com/yhenon/pytorch-retinanet 在anaconda中新建了一个环境,因为一开始并没有新建环境,在原 ...

  6. vue项目1-pizza点餐系统7-路由之控制滚动行为

    一.在home组件中设置具体信息,设计样式 <template> <div class="row"> <div id="home" ...

  7. Python自动化学习--Webdriver中的常用方法

    from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com/&q ...

  8. Codeforces Round #567 (Div. 2)B. Split a Number (字符串,贪心)

    B. Split a Number time limit per test2 seconds memory limit per test512 megabytes inputstandard inpu ...

  9. 下载放在resource下面的excel文件

    1.将excel文件放项目resources目录下 2.打包的时候排除指定后缀文件,否则打包时会出现文件损坏的情况 <configuration> <encoding>UTF- ...

  10. MAL参会的笔记1

    上周末去参加了著名的MAL.今年在天津主场,于是省去了路费问题. 来的都是平时看到论文中的大佬. 不过最大收获是收割了几个idea. 再就是知道了几个自己之前孤陋寡闻的顶会,比如COLT,VIS等等.