分清vim中查找和替换时究竟哪些是元字符,哪些不是元字符?

参考: https://blog.csdn.net/shenhuxi_yu/article/details/53413499

在vim中, 所谓的元字符, 有两种情况,

  • 一种是 单个的字符, 单个的字符就直接/ 已经是 元字符了, 比如: . * / \ [
  • 另一种是 由两个字符合在一起才能表示的 元字符, 比如 表示 个数的元字符 +, {
    那么, 单个的 +, { 并不是什么元字符, 只是普通的字符, 所以, 可以直接 取查找 它们: /+, /{ 是可以的
    像这样的 "合成"元字符主要有下面三种情况:
  1. 表示 字符个数的 合成元字符有: +, ? , {n,m}, {n,},

  2. 表示 位置的 合成元字符有: <, >

  3. 表示 分组的合成元字符有: (, ) , 可以利用分组进行颠倒替换
    正好, 这三种合成元字符 也是 vim和perl 的正则表达式在写法/语法上的区别 , vim中的三种情况 都有 反斜杠, 而 perl的正则则 都没有 反斜杠, 直接使用那些元字符

  4. 在perl的正则表达式中表示 非贪婪/懒惰匹配, 是在 表示匹配个数的元字符后面 紧跟着一个? 就可以了, 但是在vim中, 要用 {-} 来表示 懒惰匹配

  5. vim的分组 匹配的例子:
    原文: movie title: true grit
    要想将font 和color 交换一下位置, 命令是 😒/(font)\s(color)/\2\t\1/

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

recipe [resipi]: n. 食谱, 菜谱, 烹饪法; 方法, 诀窍, 秘诀
a recipe for success
a recipe for a long living
this recipe serves four people
a recipe for leek soup

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

netstat的几个主要的选项是:
第一, 关于显示的范围,
-t 只显示tcp, -u 只显示udp, -a 显示所有的连接( 默认是只显示 established的连接, 不显示监听的进程) -l 只显示正在监听的进程
第二, 是显示数字还是名称
-n 用数字的方式 显示地址和端口 , 默认的情况下, 是用机器名称如: localhost, 或foreign address以域名的方式来显示, 而端口号以服务名称https等来显示
第三, 关于 -p的选项
-p是pid/program name 显示程序名称
第四, 关于 -s 按协议进行统计的选项

第五, :: 或 [::] 表示的是ipv6, local address表示的是 本地机器上的地址和端口, foreign address表示的是外部传入进来的地址和端口,
本地地址的 0.0.0.0: 213 , 表示 如果本地机器有多个ip地址, 则在本地机器上的所有ip地址上监听...
外部地址, 表示的是 外部连接的机器... 其中 0.0.0.0:* 表示的是 外部的任意ip地址上的任意端口...
如果local和foreign地址都是本地地址, 则表示的是 本地进程调用 本地服务?
recv_Q 和send+Q 表示的是接受或发送 queue队列, 通常应该是0, 如果是非0 , 则可能有 : denial of services等问题
recv_Q 表示 接收的数据包已经在 本地接受缓冲中, 还有多少没有被本地进程取走
send_Q 表示发送的数据包还有多少没有被发出去, 还在本地发送缓存中. 如果长时间非0, 表示网络阻塞问题, 数据包堆积在网络中...

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

social security benifits: security: 在这里不是"安全"的意思, 而是"保障", benefits: "好处, 利益, 效益" 之外, 还有: "福利, 救济金, 津贴"等的意思
所以, social security benefits 就是 社会保障福利金, 社会保障津贴
claim benefits: 不是"声明" , 而是 "申请/ 申领" 福利金

prompt: 两个意思: 一个是 "提示, 暗示,提醒" , 另一个是 "敏捷的, 迅速的, 灵活的, 灵敏的"
promptly 就是 "敏捷地" adv

要慎用 rm -f f 这个选项了, 如果删除错误了, 就无法后悔和撤销了!

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

g和s的区别?

  • 这是两个不同的命令, s是substitute替换命令 而g是 global 命令,
    global命令的格式是: [range]global/pattern/{command} 默认的是 所有的文件
    /^/ 是匹配所有行, /./ 是匹配非空行,
    /^\(/ 是匹配空行(即一个字符都没有的行), 而 /^\s\+/是匹配 有空字符的行. <font color="red"> 所以, 在有些文件中, 你如果搜索 /^\s\+/ 会提示 pattern not found, 是因为这种搜索由于 有 \+ 个数限定, 至少要有一个 空白字符, 而如果所有的行, 都是没有空白字符直接回车的, 就不会找到了. 改用 /^\)/ 搜索就会匹配到.

  • \s是空字符, 实际上是两种字符: 即 空格space 和 \t tab字符
    global后面的命令包括: 删除d, 复制t, 移动 m

posted @ 2019-12-25 16:08  noitanym  阅读(394)  评论(0编辑  收藏  举报