如何替换以下字符串
hd_ma_prod_customer_ro:*:123456789:john.doe
与约翰·多伊
基本上我需要查找最后一个冒号 (:) 并删除之前的所有内容(包括它)。
答案1
假设您的实际意思是要删除直到最后一个冒号的所有内容并保持john.doe
完整:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
解释:
第一行只是通过管道将测试字符串用于sed
示例目的。
第二个是基础sed
代换。第一个和第二个之间的部分/
是要搜索的正则表达式,第二个和第三个之间的部分是要替换的内容(在本例中没有任何内容,因为我们正在删除)。
对于正则表达式,.
匹配任何字符,*
重复任意次数(包括零次)并:
匹配冒号。因此,它实际上是后面跟着冒号的任何内容。由于.*
可以包含冒号,因此匹配是“贪婪”的,并且包含直到最后一个冒号的所有内容。
答案2
另一种方法使用awk
:
awk -F: '{ print $NF }'
答案3
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
我正在替换所有出现的:与一个标签然后使用awk
提取字符串 john.doe。
如果您没有文件,可以尝试此操作。
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}'
合并格雷姆的评论以消除不必要的sed
该命令可以修改如下。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
答案4
请尝试
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
并删除
echo 'abc:fjk' |sed 's/.*://g'