首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用awk或sed删除多个元字符

如何用awk或sed删除多个元字符
EN

Stack Overflow用户
提问于 2016-05-10 15:26:26
回答 3查看 737关注 0票数 1

我试图用sed、awk或tr或任何方便但快速的实用工具从mu命令行输出中删除很少的元字符或特殊字符。此外,在我的级别上,我尝试了很少的技巧,这些技巧正在工作,但在多个命令的添加中。正是我在下面得到的..。

1)第一条命令产生的精确输出。

代码语言:javascript
复制
$ getent netgroup login_access_foxone 
login_access_foxone  (-,cacti,) (-,multi,) (-,hipot,) (-,jack,)

( 2)下面是与awk相结合产生预期输出的sed事物。

代码语言:javascript
复制
$ getent netgroup login_access_foxone | sed 's/login_access_onefarm//g' | sed 's/)/\n/g' | awk 'BEGIN {FS=","}{print $2}' | grep -v ^$
cacti
multi
hipot
jack

3)下一个使用tr命令,但又不得不使用削减来获得输出。

代码语言:javascript
复制
$ getent netgroup login_access_foxone | tr -d '(' | tr ')' '\n' | cut -d, -f2
cacti
multi
hipot
jack

4)这是带awk的,但又分为两部分

代码语言:javascript
复制
$ getent netgroup login_access_foxone | awk -v FS="[()]" '{for (i=2;i<=NF;i+=2) print $i }' | awk -F, '{print $2}'
cacti
multi
hipot
jack

5)使用sed的测试很少,但现在无法删除"-“&”",并在每个名称之后获得换行符。

代码语言:javascript
复制
$ getent netgroup login_access_foxone | sed 's/[(),]//g'
login_access_foxone  -cacti -multi -hipot -jack

$ getent netgroup login_access_foxone | sed 's|[()-]||g'
login_access_foxone  ,cacti, ,multi, ,hipot, ,jack,

6)尝试过一些难看的组合,但输出中存在包含空格的问题。

代码语言:javascript
复制
$ getent netgroup login_access_foxone | sed 's/[-,()]/\n/g'
login_access_foxone


cacti




multi




hipot




jack

我的想法是用下面的代码删除空行,但是需要用另一个管道..

代码语言:javascript
复制
$ getent netgroup login_access_foxone | sed 's/[-,()]/\n/g'|sed '/^\s*$/d'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-10 15:30:24

awk去营救!

代码语言:javascript
复制
$ awk -F, '{for(i=2;i<=NF;i+=2) print $i}' file
cacti
multi
hipot
jack

代码语言:javascript
复制
$ awk -v RS=, '!(NR%2)' file
cacti
multi
hipot
jack

在第二种选择中,我们将每一行分割成由逗号分隔的迷你记录。由于所需的字段位于两个逗号之间,所以我们将打印出偶数记录,这意味着记录号可被2除。秩序自然地保存下来(在那里没有任何意外)。

票数 3
EN

Stack Overflow用户

发布于 2016-05-10 16:05:43

您可以尝试这个sed,但是与awk相比,它非常冗长:

代码语言:javascript
复制
sed 's/[^(]*(-,\([^,]*\),)/\1\n/g;s/\n$//' file
票数 1
EN

Stack Overflow用户

发布于 2016-05-10 20:54:08

我能想到的最短的解决方案:

grep -Po ',\K\w*'

示例:

代码语言:javascript
复制
grep -Po ',\K\w*'  <<< 'login_access_foxone  (-,cacti,) (-,multi,) (-,hipot,) (-,jack,)'
cacti
multi
hipot
jack

解释:

\K:往后看

\w:a_

*:任意数量的匹配

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37142859

复制
相关文章

相似问题

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