【问题标题】:Remove everything after the first / including the first / for each line删除每行的第一个 / 包括第一个 / 之后的所有内容
【发布时间】:2013-02-08 13:32:25
【问题描述】:

我有一个包含很多主机名的文件。有些在我想删除的主机之后有一个 url 部分。换句话说:

google.com
facebook.com
acme.com/news/frontpage
bbc.co.uk
abc.com/home/index

应该变成

google.com
facebook.com
acme.com
bbc.co.uk
abc.com

【问题讨论】:

  • 感谢您的所有回答。

标签: perl sed


【解决方案1】:

一种方式:

sed 's|/.*||' file

结果:

google.com
facebook.com
acme.com
bbc.co.uk
abc.com

您可能想了解更多有关使用slash as a delimiter 的信息。 HTH。

【讨论】:

  • 感谢它起作用了——只有一件小事——当我将输出重定向到文件时,它在每一行的末尾添加了 ^M。我在linux上。
  • 您可以运行 dos2unix file 来删除 DOS/Windows 换行符。然后运行sed 命令。或者,使用awk。试试:awk -F/ '{ print $1 }' RS="\r\n" file
  • 非常感谢。出于兴趣,为什么要添加^M?原文件没有。
  • @smithy:如果我是你,我会再检查一次。我几乎可以肯定原始文件包含^M。但我以前错了。试试cat -A file
【解决方案2】:

尝试这样做:

cut -d '/' -f1 file.txt

awk -F/ '{print $1}' file.txt

perl -F/ -lane 'print $F[0]' file.txt

【讨论】:

    【解决方案3】:
    awk -F/ '{print $1}' your_file
    

    所有其他解决方案都无法就地更改文件。但如果是 steve,您需要为该 sed 解决方案添加 -i 标志。但它仍然无法在 solaris 上运行。 下面的 perl 解决方案适用于所有平台并就地替换文件

    perl -pi -e 's/\/.*//g' your_file
    

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 2015-10-23
      • 2018-03-11
      • 1970-01-01
      • 2022-08-19
      • 2012-05-19
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多