name.txt
我在使用这些字符串调用的文件中列出了:
Los Angeles, CA us1.vpn.goldenfrog.com
Washington, DC us2.vpn.goldenfrog.com
Austin, TX us3.vpn.goldenfrog.com
Miami, FL us4.vpn.goldenfrog.com
New York City, NY us5.vpn.goldenfrog.com
Chicago, IL us6.vpn.goldenfrog.com
San Francisco, CA us7.vpn.goldenfrog.com
Amsterdam eu1.vpn.goldenfrog.com
Copenhagen dk1.vpn.goldenfrog.com
Stockholm se1.vpn.goldenfrog.com
Hong Kong hk1.vpn.goldenfrog.com
London uk1.vpn.goldenfrog.com
现在我想用 sed 删除之前的所有内容*.vpn.goldenfrog.com
(其中*
是三个字符)。
我想要的输出:
hk1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
etc ...
答案1
如果不是必须的sed
,awk
则可以针对此过程进行删除:
awk '{print $NF}' filename
答案2
如果你想要一个sed
解决方案:
sed 's/.*[[:blank:]]\([^[:blank:]]*\)$/\1/' file.txt
捕获的组 ( \1
) 将包含最后一个空格之后的行部分,我们在替换中使用它。
例子:
% sed 's/.*[[:blank:]]\([^[:blank:]]*\)$/\1/' file.txt
us1.vpn.goldenfrog.com
us2.vpn.goldenfrog.com
us3.vpn.goldenfrog.com
us4.vpn.goldenfrog.com
us5.vpn.goldenfrog.com
us6.vpn.goldenfrog.com
us7.vpn.goldenfrog.com
eu1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
se1.vpn.goldenfrog.com
hk1.vpn.goldenfrog.com
uk1.vpn.goldenfrog.com
grep
也可以轻松做到这一点:
% grep -o '[^[:blank:]]*$' file.txt
us1.vpn.goldenfrog.com
us2.vpn.goldenfrog.com
us3.vpn.goldenfrog.com
us4.vpn.goldenfrog.com
us5.vpn.goldenfrog.com
us6.vpn.goldenfrog.com
us7.vpn.goldenfrog.com
eu1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
se1.vpn.goldenfrog.com
hk1.vpn.goldenfrog.com
uk1.vpn.goldenfrog.com
答案3
假设文件是空格分隔的,您可以简单地删除每行的内容,直到最后一个空格字符:
$ sed 's/.* //' file
us1.vpn.goldenfrog.com
us2.vpn.goldenfrog.com
us3.vpn.goldenfrog.com
us4.vpn.goldenfrog.com
us5.vpn.goldenfrog.com
us6.vpn.goldenfrog.com
us7.vpn.goldenfrog.com
eu1.vpn.goldenfrog.com
dk1.vpn.goldenfrog.com
se1.vpn.goldenfrog.com
hk1.vpn.goldenfrog.com
uk1.vpn.goldenfrog.com
如果文件使用制表符作为分隔符,您可以[[:blank:]]
在表达式中使用空格字符代替文本。这将匹配一个选项卡或者空格字符:
sed 's/.*[[:blank:]]//' file
cut
您还可以通过首先反转每一行,然后反转删除第一个字段的结果来获取最后一个制表符分隔的字段:
rev file | cut -f 1 | rev
如果数据正好有两个制表符分隔的字段并且您想要其中第二个字段,那么它就更简单了:
cut -f 2 file