js 正则表达式奇偶字符串替换_正则表达式 linux shell 删除偶数奇数行 取得最后一个字符 s/\(^.*$\)\n^.*$/\1/g | 学步园...

alert(){

#Usage:alert

if [ "$1" -ne 0 ]

then

echo "WARNING:$2 did not complete succfully." >&2

exit $1

else

echo "INFO:$2 completed successfully." >&2

fi

}

成都 10:29:42

删除偶数行:

%s/\(^.*$\)\n^.*$/\1/g

删除奇数行:

%s/^.*$\n\(^.*$\)/\1/g

%s/\(^.*$\)\n^.*$/\1/g      vi 替换命令谁能帮忙讲一下

雨后々清风 9:51:12

全局替换所有去掉特殊符号

北京@王帅 10:13:09

\( \)   是所有内容

^  改行开头

^. 开行开头的第一个字符

* 后面跟的字符

$ 换行

\n 换行

\1  这个不知道啥意思...

悠悠巷口10:15:53

\1 是不 是代表第一个保存的字符串啊

北京@王帅 10:15:59

不会....

北京@王帅 10:16:06

这个正则的功能是隔行删除...

北京@王帅 10:16:10

咋实现的  我不知道

悠悠巷口 10:19:33

\n^.*$/ 这个看不懂

成都@itnihao 10:21:10

每行开头

有点得字符

至结尾

悠悠巷口(176481899) 10:21:41

那它还用\n什么作用

北京@王帅 10:22:04

.不是代表有点的字符...

北京@王帅 10:22:07

点是通配符..

成都@itnihao 10:22:20

悠悠巷口10:22:22

也有这个作用

北京@王帅10:22:48

%s/\(^.*$\)\n^.*$/\1/g     vi 替换命令谁能帮忙讲一下

%s/  语法

\(^.*$\)\n^.*$

/ 语法

\1

/g  语法

解释:

正则表达式预备知识

注意到,对于正则表达式有

匹配 任意字符 ( 除换行符 ) .

匹配重复零次或多次前一字符 *

匹配集合中任意字符 [...]

匹配不属集合 中 任意字符 [^...]

匹配 行首、行尾 ^, $

匹配 词首、词尾 \

正则表达式 分组 \(...\)

第 n 个分组内容 \n

于是

\1 表示第一个正则表达式分组即\(^.*$\) 我们暂将第一个正则表达式分组\(^.*$\)其记为:A

类推,\2就应该表示第二个正则表达式分组,即 \n^.*$  实际上 也应该写在括号内比较好:\(\n^.*$\) ,我们也暂将第二个正则表达式分组\n^.*$

记为:B

于是

%s/\(^.*$\)\n^.*$/\1/g

就可以写为:

%s/AB/A/g

即将所有AB都替换成A。

现在我们来分别分析A和B的作用。

A=\(^.*$\)

抽取出来实际上是\(...\),表示正则表达式 分组,再分析括号内的^.*$,^代表行首,

.匹配 任意字符 ( 除换行符 ) , *匹配重复零次或多次前一字符 , $代表匹配到行尾,综合起来就是:匹配这一行

B=\n^.*$

解释: \n换行,^.*$同上,表示匹配这一行,综合起来就是:下一行(即上行结束后开始的另一行)。

再于是就有:%s/AB/A/g 即将所有AB都替换成B  ,代入A和B各自意思得到:

将两行(如行1和行2 )内容替换为第一行内容(即行1的内容),加上/g,就是对全文进行前述替换,也就是隔行删除,如果是从文件第一行开始进行的操作,就意味着是删除所有偶数行、保留所有奇数行操作。

删除偶数行:

%s/\(^.*$\)\n^.*$/\1/g

删除奇数行:

%s/^.*$\n\(^.*$\)/\1/g

补充另一例子: sed 's/\(.*\)\(.\)$/\2/'

\2就应该表示第二个正则表达式分组

同上,也将A=/\(.*\),B=\(.\)$,表达式变为's/AB/B',将AB都替换成B。

分析A、B作用。

A=/\(.*\)     抽取出来实际上是\(...\),表示正则表达式

分组,再分析括号内的 .*,表示匹配任意零个或多个字符 ( 除换行符 )

B=\(.\)$      括号内的 . ,表示匹配 任意字符 ( 除换行符

) ,括号外的$表示匹配到行尾,即表示行尾的最后一个字符;那上述的A /\(.*\)  就表示该行最后一个字符前的所有字符。

于是 sed 's/\(.*\)\(.\)$/\2/'

作用就是:删除该行除最后一个字符外的所有字符,保留最后一个字符,也即取得该行最后一个字符。北京@王帅 10:23:37

把语法的地方去掉  看具体内容

北京@王帅 10:25:18

\(  ^. * $  \)  \n ^.*$

匹配整个文本\(\)

开头位置字符匹配至结尾 匹配内容为第一个字符0个或者N个 制止改行结束   之后勋章换行符  再之后匹配开头的第一个字符到结束 删除一行.

感谢王帅 和成都

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值