如何替换以下字符串
hd_ma_prod_customer_ro:*:123456789:john.doe
Run Code Online (Sandbox Code Playgroud)
与约翰·多伊
基本上我需要查找最后一个冒号 (:) 并删除它之前和包括它的所有内容。
Gra*_*eme 60
假设您的实际意思是要删除最后一个冒号之前的所有内容并john.doe保持完整:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
Run Code Online (Sandbox Code Playgroud)
第一行只是将测试字符串sed用于示例目的。
二是基本sed换人。第一个和第二个之间的部分/是要搜索的正则表达式,第二个和第三个之间的部分是要替换它的内容(在我们要删除的情况下没有任何内容)。
对于正则表达式,.匹配任何字符,*重复任意次数(包括零)并:匹配冒号。因此,它实际上是后跟冒号的任何内容。由于.*可以包含一个冒号,所以匹配是“贪婪的”并且包括最后一个冒号之前的所有内容。
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
Run Code Online (Sandbox Code Playgroud)
我将所有出现的:替换为一个选项卡,然后使用它awk来提取字符串 john.doe。
如果你没有文件,你可以试试这个。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
Run Code Online (Sandbox Code Playgroud)
根据 Graeme 的评论,我们可以使用下面awk的NF变量来单独打印最后一列awk。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
纳入 Graeme 的评论以摆脱不必要的 sed
该命令可以修改如下。
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
小智 4
请尝试
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
Run Code Online (Sandbox Code Playgroud)
并删除
echo 'abc:fjk' |sed 's/.*://g'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178093 次 |
| 最近记录: |