案例一:删除所有行某列字符后的所有字符
# cat test.txt | colrm 3
或者:
# colrm 3 < test.txt
(补充:这里以删除所有行第 3 列及以后的所有字符)
案例二:删除所有行从某列字符到某列字符期间的所有字符
# cat test.txt | colrm 3 6
或者:
# colrm 3 6 < test.txt
(补充:这里以删除所有行第 3 列到第 6 列包括第 3 列和第 6 列的所有字符)
# cat test.txt | colrm 3
或者:
# colrm 3 < test.txt
(补充:这里以删除所有行第 3 列及以后的所有字符)
# cat test.txt | colrm 3 6
或者:
# colrm 3 6 < test.txt
(补充:这里以删除所有行第 3 列到第 6 列包括第 3 列和第 6 列的所有字符)
1) \b 匹配单词边界处的空格字符,使用案例:# echo “ mingyuzhu ” | grep -P “\bmingyuzhu\b”
2) \B 匹配单词边界处的非空格字符,使用案例:# echo “mingyuzhu” | grep -P “\Bingyuzh\B”
3) \K 不要将 \K 左边的内容放进 $& (匹配的内容),也就是不会对 \K 左边的内容进行匹配
4) \A 匹配行首,使用案例:# echo mingyuzhu | grep -P “\Am”
5) \z 匹配行尾,使用案例:# echo mingyuzhu | grep -P “u\z”
6) \Z 匹配行尾或者匹配行尾换行符前面,使用案例:# echo mingyuzhu | grep -P “u\Z”
7) \G 全局匹配成功,位移指针自然会后移。全局匹配失败,位移指针会重置。如果匹配失败同时加上 \c 修饰符那位移指针不会变化
$txt = "123eternalcenter456";
$txt =~ /\G\d\d\d/gc;
print "matched $&: ",pos $txt,"\n";
matched 123: 3
(
补充:
1) $& 代表匹配的内容
2) $` 代表匹配的内容前面的内容
3) $’ 代表匹配的内容后面的内容
)
8) 结尾处的 \g 全局匹配,当要匹配的内容出现时不会停下而是继续匹配下去,直到检查完全文。且每次匹配成功后都会记下指定位,每次记下的指定位在匹配的字符的左边,下次再匹配时就会从这个指定位开始匹配。每次的匹配位置可以通过 pos() 函数获取,如果匹配失败位移指针则会重置,pos 将返回 undef。如果和 \c 修饰符组合成 \gc, 匹配失败则不重置位移指针而是将位移指针向后移动 1 位,直到移动到最后 1 位。一般在匹配位置的最后面,案例:
$txt = "123eternalcenter456";
$txt =~ /\d\d\d/g;
print "matched $&: ",pos $txt,"\n";
matched 123: 3
(
补充:
1) $& 代表匹配的内容
2) $` 代表匹配的内容前面的内容
3) $’ 代表匹配的内容后面的内容
)
9) \w 匹配单词,等价于 [[:alnum:]] 10) \W 匹配非单词,等价于 [^[:alnum:]]
11) \s 匹配空格字符,等价于 [[:space:]]
12) \S 匹配非空格字符,等价于 [^[:space:]]
13) \d 匹配数字,等价于 [0-9]
14) \D 匹配非数字,等价于 [^0-9]
15) \n 匹配换行
16) \N 不匹配换行,等价于 [^\n]
Linux 基础的正则表达式
?、*、(、)、{、} 等元字符前面必须添加转义符号 \ (斜杠)才能起作用,否则将被视为普通的字符
1) 通过 grep 命令使用
2) 通过 sed 命令使用
在 Linux 基础正则表达式 (BRE) 上有所扩展
?、*、(、)、{、} 等元字符前面不用添加转义符号 \ (斜杠)就能起作用
1) 通过 egrep 命令使用
2) 通过 grep 命令加 -E 参数 (grep -E) 使用
3) 通过 sed 命令加 -E 参数(sed -E)
4) 通过 sed 命令加 -r 参数 (sed -r) 使用
在 Linux 扩展正则表达式 (ERE) 上又有所扩展,并加入了 Perl 语言的一些特性
支持 lookahead 断言、lookbehind 断言、递归模式、命名捕获组等高级功能
通过 grep 命令加 -P 参数 (grep -P) 使用
trap '' INT
end() {
echo "This script is over"
}
trap end EXIT
(补充:这里以将 EXIT 信号设置为 echo “This script is over” 为例)
1) declare、typeset 和 local 的作用都是声明脚本中的变量
2) local 只能用在函数内部
3) declare、typeset 和 local 的选项一样
declare <OPTION> <NAME1>=<VALUE1> <NAME2>=<VALUE2> ......
1) -g 指定要声明的变量为全局变量而不是局部变量
2) -I 给变量赋值时将值转化为小写
3) -u 给变量赋值时将值转化为大写