使用 sed 删除行首

使用 sed 删除行首

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

如果不是必须的sedawk则可以针对此过程进行删除:

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

相关内容