我试图用sed、awk或tr或任何方便但快速的实用工具从mu命令行输出中删除很少的元字符或特殊字符。此外,在我的级别上,我尝试了很少的技巧,这些技巧正在工作,但在多个命令的添加中。正是我在下面得到的..。
1)第一条命令产生的精确输出。
$ getent netgroup login_access_foxone
login_access_foxone (-,cacti,) (-,multi,) (-,hipot,) (-,jack,)( 2)下面是与awk相结合产生预期输出的sed事物。
$ 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
jack3)下一个使用tr命令,但又不得不使用削减来获得输出。
$ getent netgroup login_access_foxone | tr -d '(' | tr ')' '\n' | cut -d, -f2
cacti
multi
hipot
jack4)这是带awk的,但又分为两部分
$ getent netgroup login_access_foxone | awk -v FS="[()]" '{for (i=2;i<=NF;i+=2) print $i }' | awk -F, '{print $2}'
cacti
multi
hipot
jack5)使用sed的测试很少,但现在无法删除"-“&”",并在每个名称之后获得换行符。
$ 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)尝试过一些难看的组合,但输出中存在包含空格的问题。
$ getent netgroup login_access_foxone | sed 's/[-,()]/\n/g'
login_access_foxone
cacti
multi
hipot
jack我的想法是用下面的代码删除空行,但是需要用另一个管道..
$ getent netgroup login_access_foxone | sed 's/[-,()]/\n/g'|sed '/^\s*$/d'发布于 2016-05-10 15:30:24
awk去营救!
$ awk -F, '{for(i=2;i<=NF;i+=2) print $i}' file
cacti
multi
hipot
jack或
$ awk -v RS=, '!(NR%2)' file
cacti
multi
hipot
jack在第二种选择中,我们将每一行分割成由逗号分隔的迷你记录。由于所需的字段位于两个逗号之间,所以我们将打印出偶数记录,这意味着记录号可被2除。秩序自然地保存下来(在那里没有任何意外)。
发布于 2016-05-10 16:05:43
您可以尝试这个sed,但是与awk相比,它非常冗长:
sed 's/[^(]*(-,\([^,]*\),)/\1\n/g;s/\n$//' file发布于 2016-05-10 20:54:08
我能想到的最短的解决方案:
grep -Po ',\K\w*'
示例:
grep -Po ',\K\w*' <<< 'login_access_foxone (-,cacti,) (-,multi,) (-,hipot,) (-,jack,)'
cacti
multi
hipot
jack解释:
\K:往后看
\w:a_
*:任意数量的匹配
https://stackoverflow.com/questions/37142859
复制相似问题