正则表达式 linux shell 删除偶数奇数行 取得最后一个字符 s/\(^.*$\)\n^.*$/\1/g
来源:互联网 发布:小米6相机优化 编辑:程序博客网 时间:2024/06/07 10:22
alert(){#Usage:alert <$?> <object>if [ "$1" -ne 0 ]then echo "WARNING:$2 did not complete succfully." >&2 exit $1else echo "INFO:$2 completed successfully." >&2fi}
成都<@qq.com> 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 是不 是代表第一个保存的字符串啊
北京@王帅<wangshuai1987@vip.qq.com> 10:15:59
不会....
北京@王帅<wangshuai1987@vip.qq.com> 10:16:06
这个正则的功能是隔行删除...
北京@王帅<wangshuai1987@vip.qq.com> 10:16:10
咋实现的 我不知道
悠悠巷口 10:19:33
\n^.*$/ 这个看不懂
成都@itnihao<itnihao@qq.com> 10:21:10
每行开头
有点得字符
至结尾
悠悠巷口(176481899) 10:21:41
那它还用\n什么作用
北京@王帅 10:22:04
.不是代表有点的字符...
北京@王帅<wangshuai1987@vip.qq.com> 10:22:07
点是通配符..
成都@itnihao 10:22:20
悠悠巷口10:22:22
也有这个作用
北京@王帅10:22:48
.不是代表有点的字符...
北京@王帅<wangshuai1987@vip.qq.com> 10:22:07
点是通配符..
成都@itnihao 10:22:20
悠悠巷口10:22:22
也有这个作用
北京@王帅10:22:48
%s/\(^.*$\)\n^.*$/\1/g vi 替换命令谁能帮忙讲一下
%s/ 语法
\(^.*$\)\n^.*$
/ 语法
\1
%s/ 语法
\(^.*$\)\n^.*$
/ 语法
\1
/g 语法
解释:
正则表达式预备知识
注意到,对于正则表达式有
匹配 任意字符 ( 除换行符 ) .
匹配重复零次或多次前一字符 *
匹配集合中任意字符 [...]
匹配不属集合 中 任意字符 [^...]
匹配 行首、行尾 ^, $
匹配 词首、词尾 \<, \>
正则表达式 分组 \(...\)
第 n 个分组内容 \n
匹配重复零次或多次前一字符 *
匹配集合中任意字符 [...]
匹配不属集合 中 任意字符 [^...]
匹配 行首、行尾 ^, $
匹配 词首、词尾 \<, \>
正则表达式 分组 \(...\)
第 n 个分组内容 \n
于是
\1 表示第一个正则表达式分组即\(^.*$\) 我们暂将第一个正则表达式分组\(^.*$\)其记为:A
类推,\2就应该表示第二个正则表达式分组,即 \n^.*$ 实际上 也应该写在括号内比较好:\(\n^.*$\) ,我们也暂将第二个正则表达式分组 \n^.*$
记为:B
记为:B
于是
%s/\(^.*$\)\n^.*$/\1/g
就可以写为:
%s/AB/A/g
即将所有AB都替换成A。
即将所有AB都替换成A。
现在我们来分别分析A和B的作用。
A=\(^.*$\)
抽取出来实际上是\(...\),表示正则表达式 分组,再分析括号内的^.*$,^代表行首,
.匹配 任意字符 ( 除换行符 ) , *匹配重复零次或多次前一字符 , $代表匹配到行尾,综合起来就是:匹配这一行
抽取出来实际上是\(...\),表示正则表达式 分组,再分析括号内的^.*$,^代表行首,
.匹配 任意字符 ( 除换行符 ) , *匹配重复零次或多次前一字符 , $代表匹配到行尾,综合起来就是:匹配这一行
B=\n^.*$
解释: \n换行,^.*$同上,表示匹配这一行,综合起来就是:下一行(即上行结束后开始的另一行)。
解释: \n换行,^.*$同上,表示匹配这一行,综合起来就是:下一行(即上行结束后开始的另一行)。
再于是就有:%s/AB/A/g 即将所有AB都替换成B ,代入A和B各自意思得到:
将两行(如行1和行2 )内容替换为第一行内容(即行1的内容),加上/g,就是对全文进行前述替换,也就是隔行删除,如果是从文件第一行开始进行的操作,就意味着是删除所有偶数行、保留所有奇数行操作。
删除偶数行:
%s/\(^.*$\)\n^.*$/\1/g
删除奇数行:
%s/^.*$\n\(^.*$\)/\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 /\(.*\) 就表示该行最后一个字符前的所有字符。
) ,括号外的$表示匹配到行尾,即表示行尾的最后一个字符;那上述的A /\(.*\) 就表示该行最后一个字符前的所有字符。
于是 sed 's/\(.*\)\(.\)$/\2/'
作用就是:删除该行除最后一个字符外的所有字符,保留最后一个字符,也即取得该行最后一个字符。
北京@王帅 10:23:37
把语法的地方去掉 看具体内容
北京@王帅 10:25:18
\( ^. * $ \) \n ^.*$
匹配整个文本\(\)
开头位置字符匹配至结尾 匹配内容为第一个字符0个或者N个 制止改行结束 之后勋章换行符 再之后匹配开头的第一个字符到结束 删除一行.
作用就是:删除该行除最后一个字符外的所有字符,保留最后一个字符,也即取得该行最后一个字符。
北京@王帅 10:23:37
把语法的地方去掉 看具体内容
北京@王帅 10:25:18
\( ^. * $ \) \n ^.*$
匹配整个文本\(\)
开头位置字符匹配至结尾 匹配内容为第一个字符0个或者N个 制止改行结束 之后勋章换行符 再之后匹配开头的第一个字符到结束 删除一行.
感谢王帅 和成都<itnihao 的提供的思路和答案。
案例
#!/usr/bin/env bashAPP="${project.artifactId}"LOG_BASE="/home/admin/logs"LOG_DIR="$LOG_BASE/$APP"export PID_FILE="$LOG_DIR/$APP.pid"export LANG="zh_CN.UTF-8"export LC_ALL="zh_CN.UTF-8"export JAVA_HOME=/home/admin/local/jdk1.7.0_79export JAVA_BIN=$JAVA_HOME/binexport JAVA_PATH=$JAVA_HOME/binexport JAVA_OPTS="-Xms2048m -Xmx2048m -XX:MaxPermSize=256m"export HADOOP_USER_NAME=hdfsCONFIG_PATH=$(cd "$(dirname "$0")/../config";pwd)LIB_PATH=$(cd "$(dirname "$0")/../lib";pwd)# 组装 CLASSPATHALL_JARS=$(ls "$LIB_PATH")CLASS_PATH=""for jar in $ALL_JARSdo CLASS_PATH="$CLASS_PATH""$LIB_PATH""/""$jar"":"doneCLASS_PATH=`echo $CLASS_PATH | sed -r 's/^(.*):$/\1/g'`
0 0
- 正则表达式 linux shell 删除偶数奇数行 取得最后一个字符 s/\(^.*$\)\n^.*$/\1/g
- 正则表达式 linux shell 删除偶数奇数行 取得最后一个字符 s/\(^.*$\)\n^.*$/\1/g
- vim 正则表达式 %s/\n/\n/g 结果不一样了
- linux 显示奇数偶数行
- shell 打印偶数行奇数行
- excel删除奇数行或者偶数行
- 消除空白行^\s*\n,正则表达式
- 如何取得字符串最后一个字符
- shell去掉最后一个字符
- shell去掉最后一个字符
- js删除最后一个字符
- StringBuilder删除最后一个字符
- 实现一个数组中奇数和偶数分开,奇数在前部分,偶数在后部分 时间复杂度为O(n),空间复杂度为O(1)
- 从键盘中输入一个整数n,求1-n的和,以及偶数和、奇数和
- shell正则表达式字符含义
- linux shell 第一章 正则表达式及元字符组合
- Linux shell: 正则表达式
- 正则表达式 linux shell
- 【概率】BZOJ 3450:Tyvj1952 Easy
- Web-Scale IT:对企业的影响
- Spring 读取properties文件
- 使用微信JSSDK自定义微信分享标题、描述时需要注意的问题
- ajax返回json格式时,中文乱码问题,以问号形式呈现
- 正则表达式 linux shell 删除偶数奇数行 取得最后一个字符 s/\(^.*$\)\n^.*$/\1/g
- 从通知栏进入应用中的某一页面,回退事件的处理
- <tx:annotation-driven>使用说明
- Android版添加phonegap--Native Api插件教程
- sharesdk微信分享
- 自定义控件(四)-下拉刷新与上拉加载
- Django部署到Apache后出现的访问失败的问题
- IOS开发 抛物线
- Android app的混淆打包