【问题标题】:Need to remove last string需要删除最后一个字符串
【发布时间】:2020-08-10 23:35:13
【问题描述】:

我有代码

echo whoisdatacenter.com_101_llc.csv | sed 's/_/ /g' | perl -pe 's/\w+/\L\u$&/g'

它给了我

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Whoisdatacenter.Com 101 Llc.Csv

如何实现

WHOISDATACENTER.COM 101 LLC

(大写字母和“.csv”已删除)

稍加解释的答案将非常有帮助....

【问题讨论】:

    标签: linux bash perl awk sed


    【解决方案1】:

    使用 GNU sed for \U:

    $ echo 'whoisdatacenter.com_101_llc.csv' |
        sed 's/\.csv$//; s/_/ /g; s/.*/\U&/g'
    WHOISDATACENTER.COM 101 LLC
    

    【讨论】:

    • 您应该将foo.csv.com 之类的域名添加到您的示例输入/输出中,因为您会得到几个答案,这些答案适用于您提供的域名,但不适用于其他人。
    • 这里 s/\.csv$// $ 代表我的文本行的结尾?
    • 正确。 $ 表示行尾,因此如果 .csv 恰好也出现在行的中间,它不会被删除。
    • 我得到了预定义的值......这些基本上不是域......有些公司的名字像 aegean_domains_llc.csv。
    • 所以当我在这个 echo 'aegean_domains_llc.csv' 中添加你的代码时 | sed 's/\.csv$//; s/_/ /g; s/.*/\U&/g' AEGEAN DOMAINS LLC 它运作良好
    【解决方案2】:
    echo whoisdatacenter.com_101_llc.csv | awk -F ".csv" '{print toupper($1)}'
    

    我们将字段分隔符设置为.csv,因此字段$1 始终是直到第一个.csv 出现的子字符串(在本例中为whoisdatacenter.com_101_llc)。然后,在该字段上使用字符串函数toupper,将其转换为大写字符。

    【讨论】:

    • 你能解释一下为什么这能解决问题吗?
    • @economy 当然,对不起,我通常会这样做,但这次我忘了!
    【解决方案3】:

    \L\u(第一个大写,其余小写)应为\U(全部大写)。

    perl -pe's/_/ /g; s/\.csv$//; s/.*/\U$&/'
    

    你也可以使用

    perl -pe's/_/ /g; s/\.csv$//; $_ = uc($_)'
    
    perl -pe'$_ = uc(s/_/ /gr =~ s/\.csv$//r)'
    
    perl -ne'print uc(s/_/ /gr =~ s/\.csv$//r)'
    

    你必须修复你的语言环境来消除警告——无论如何你都应该这样做——但它不应该阻止上述任何一个工作。

    【讨论】:

      【解决方案4】:

      您可以使用 sed 和 tr 命令组合来实现此目的。

      echo whoisdatacenter.com_101_llc.csv|sed 's!.csv! !g; s!_! !g'|tr '[:lower:]' '[:upper:]'
      

      WHOISDATACENTER.COM 101 LLC

      第一个 sed 命令将 .csv 文件替换为空文件。

      第二个 sed 命令将特殊字符 (_) 替换为空。

      使用tr命令将小写字母转换为大写字母

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 2013-07-29
        • 2017-08-19
        • 1970-01-01
        相关资源
        最近更新 更多