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相当于仓库,加工的半成品在这里临时储存

最新文章

  1. Tomcat 7.0的配置
  2. 上层建筑——DOM元素的特性与属性(dojo/dom-attr)
  3. C#一元运算重载的深入理解
  4. Android MuPDF 阅读PDF文件
  5. 一张图让你看懂各开源License[转]
  6. 移动端 js touch事件
  7. 做一个有理想的IT人
  8. cURL安装和使用笔记
  9. git命令行工作的正确姿势
  10. cas 4.1.4单点登录实战
  11. centos网络配置方法(手动设置,自动获取)
  12. Python——Pycharm基本设置
  13. jquery中val属性操作
  14. 结对项目3-功能增强型带基本函数计算java计算器
  15. Linux ls 排序
  16. WGCNA | weighted correlation network analysis
  17. socket 映射服务器程序
  18. JVM -verbose参数详解(转)
  19. 退出vim
  20. 写出优质Java代码的4个技巧(转)

热门文章

  1. Centos7Yum安装PHP7.2流程
  2. python字符串替换的2种方法
  3. 一、JsonTree
  4. bean获取Spring容器
  5. varnish流程图
  6. 并行操作多个序列map
  7. sql优化-派生表与inner-join
  8. shell练习--PAT题目1001:卡拉兹(Callatz)猜想(失败案例)
  9. 最小生成树(Kruskal算法)模板
  10. Kohana Minion cli 学习