简单介绍 sed 的正则表达式的使用注意事项.可以看如下的几个case:
一个case:
输入: echo "abcwwwdc456" | gsed -E 's/(abc)([\w]+)(.*456)/\1替换后的字符\3/g'
输出: abc替换后的字符dc456
解释: [\w]+只匹配到了所有的`w`.没有匹配后面的`dc`,所以dc没有被替换.
原因: 实际上字符集是`\`和`w`两者的集合.并不是 **匹配数字和字母下划线** , `\`在 `[ ]`中没有特殊的含义.所以也就无法构建出`\w`
第二个case:
输入: echo "abcwwwdc456" | gsed -E 's/(abc)(\w+)(.*456)/\1替换后的字符\3/g'
输出: abc替换后的字符456
解释: `\w`被识别为了字符集. **数字和字母下划线** , 因此匹配到了w以及后面的dc
原因: 在sed的普通的`s语句`中.是支持如 `\w`,`\b`此类的字符集的.
第三个case:
输入: echo "abcwwwdc456" | ggrep -o -P --color=auto '(abc)([\w]+)'
输出: abcwwwdc456
解释: `grep`的正则的字符集的定义支持把`\w`放到`[]`中定义新的字符集. 这个更倾向于更常见的正则语法. 写起来也更自然一些
原因: 这个grep使用的是perl语法风格的正则. 因此支持这样处理.
解决 EXCEL VLOOKUP 数据关联时候的目标查找区域不固定的问题.
一. 并发编程的三要素 1. 原子性 同一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 2. 可见性 当多个线程访问同一个变量时,一个线程修改类这个变量的值,其他线程能够立即得到修改的值。 3. 有序性 程序执行的顺序按照代码的先后顺序执行。 在多线程的环境下,必须要保证原子性、可见性和有序性。只要有一个没有被保证买就有可能会导致程序运行错误。 二. 指令重排序 三. java中对并发编程三要素的处理 原子性 可见性 有序性 四. java内存模型(JMM) 五. 顺序一致性模型
记录了 sed 的常用命令.主要是字符串替换操作. 从其基本语法.到常用命令.以及命令使用的基本核心点进行了主要阐述.阅读此文后能够对 sed 有一个基本的理解.
基本能够覆盖常用的使用场景.
在 Linux 环境中,可以直接使用如下命令: echo "a,b,c" | sed 's/,/\n/g'
直接完成行转列的输出;但是此命令在 OS X 环境中无法正常运行;本文对此问题进行了简单的研究实践;这个是由于 OS X 使用的sed
版本与GNU
版本不太一样.其使用的是BSD
版本的sed
命令,使用brew install gnu-sed
安装命令,并且使用:gsed
来使用GNU
版本的sed
命令;
介绍了 Linux 和 Unix 不同环境下需要处理\r
相关的处理办法.可以使用sed
, tr
以及${var//origin/replace}
三种处理办法.同时说明了最后一种是效率最高的.
同时本文也对不同环境中 shell 脚本语法的不同之处进行了简单说明.以期在不同的环境里面可以正确的处理\r
的清除问题.
处理方法如下:
echo "$a" | tr -d '\r' | od -c
echo "$a" | sed $'s/\r//g' | od -c
echo "${a//$'\r'/}" | od -c