Answers:
假设您的实际意思是要删除所有内容,直到最后一个冒号并john.doe
保持原样:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
第一行只是通过管道将测试字符串传送到sed
示例中。
第二个是基本sed
替代。第一个和第二个之间的部分/
是要搜索的正则表达式,第二个和第三个之间的部分是要替换的内容(在这种情况下,我们将删除任何内容)。
对于正则表达式,.
匹配任何字符,*
重复此次数任意次(包括零)并:
匹配冒号。如此有效的是冒号后面紧跟的任何东西。由于.*
可以包含冒号,因此匹配为“贪婪”,并且包括最后一个冒号之前的所有内容。
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
我用选项卡替换了所有出现的:,然后用于提取字符串john.doe。awk
如果没有文件,可以尝试此操作。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
根据Graeme的评论,我们可以使用如下变量awk
单独打印最后一列。NF
awk
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
结合Graeme的评论来摆脱不必要的 sed
该命令可以如下修改。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk
。基本上,我尝试测试我最初从答案中获得的命令,并尝试根据用户要求对其进行修改。:)
-F
对选项awk
指定字段分隔符。如果您告诉awk
您使用冒号,则无需用制表符替换冒号。另外,如果您想获取最后一个可以$NF
代替的字段$4
,则可以在不总是3个冒号的情况下使用。
awk
,为什么不做awk -F:
呢?