首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果字符串存在(包括变量),请使用awk或sed将其翻转。

如果字符串存在(包括变量),请使用awk或sed将其翻转。
EN

Stack Overflow用户
提问于 2015-06-16 23:05:43
回答 5查看 76关注 0票数 0

我有这样一个csv文件:

代码语言:javascript
复制
,College Level Math 55,Elementary Algebra 112
,Elementary Algebra 79,
,College Level Math 102,Elementary Algebra 54
,,College Level Math 54

我需要执行以下操作的awk或sed命令

如果College Level Math *,Elementary Alegrbra *存在,则翻转它,使其看起来像

代码语言:javascript
复制
Elementary Algebra *, College Level Math *

期望输出

代码语言:javascript
复制
,Elementary Algebra 112,College Level Math 55
,Elementary Algebra 79,
,Elementary Algebra 54,College Level Math 102
,,College Level Math 54

我的问题是,我不知道在结尾的数字,或它是否将是2或3位数。

我知道如何翻转它,如果每次都是完全相同的文字。

代码语言:javascript
复制
sed -e 's/College Level Math,Elementary Algebra/Elementary Algebra,College Level Math/g'

但是数字变量让我不知所措。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-06-17 00:30:08

在扩展正则表达式中使用sed

代码语言:javascript
复制
sed -r 's/(College Level Math.*?),(Elementary Algebra.*)/\2,\1/g' filepath

\1是第一个捕获的组(College Level Math.*?)

\2是第二个捕获组(Elementary Algebra.*)。

因此,上面的sed执行从\1,\2\2,\1的替换操作。

上述正则表达式适用于一般情况,但在以下情况下将失败:

代码语言:javascript
复制
,College Level Math 55,Elementary Algebra 111,Elementary Algebra 112
#\1=College Level Math 55,Elementary Algebra 111

,College Level Math 55,College Level Math 55,Elementary Algebra 112
#\1=College Level Math 55,College Level Math 55

因此,最好不要使用像.*这样的贪婪正则表达式,相反,如果条目是逗号分隔的,则应该使用以下命令:

代码语言:javascript
复制
sed -r 's/(College Level Math[^,]*),(Elementary Algebra[^,]*)/\2,\1/g' filepath
票数 2
EN

Stack Overflow用户

发布于 2015-06-16 23:49:33

在正则表达式中使用俘获

代码语言:javascript
复制
sed 's/\(College Level Math[^,]*\),\(Elementary Algebra[^,]*\)/\2,\1/'

编辑:在我以前的一个答复中,有人向我指出,为了将括号从文字转换为元字符而对括号进行转义是不符合POSIX的,因此也不像它可能的那样可移植。如果您需要考虑可移植性,可以省略\,只需使用-r选项来启用扩展正则表达式语法,如Jahid的答案所示。

票数 1
EN

Stack Overflow用户

发布于 2015-06-16 23:52:48

代码语言:javascript
复制
$ awk 'BEGIN{FS=OFS=","} $2!="" && $3!=""{t=$2;$2=$3;$3=t} 1' file
,Elementary Algebra 112,College Level Math 55
,Elementary Algebra 79,
,Elementary Algebra 54,College Level Math 102
,,College Level Math 54
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30879728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档