【问题标题】:Sed command to extract substring of character separated words in a stringsed命令提取字符串中字符分隔单词的子字符串
【发布时间】:2012-02-07 12:53:30
【问题描述】:

给定一个字符串,例如abc-def-ghi-jkl
sed 命令能否提取第 n 个分隔符左侧的子字符串,例如 abc 表示 1,abd-def 表示 2 等?

我需要它来根据计算机主机名的子集创建文件,通常是abc-def-xyz.domain.com

环顾四周,awkcutsed 在这种提取中组合在一起,但我更喜欢可以用作命令行一部分的东西。

【问题讨论】:

  • 是否需要sed?您是否考虑过使用cut
  • @MarkByers 我已编辑以允许更多选项,主要要求是在 shell 命令中的可用性

标签: sed substring separator


【解决方案1】:

cut是你的朋友:

$ echo "abc-def-ghi-jkl" | cut -d- -f1
abc
$ echo "abc-def-ghi-jkl" | cut -d- -f-2
abc-def
$ echo "abc-def-ghi-jkl" | cut -d- -f-3
abc-def-ghi
$ echo "abc-def-ghi-jkl" | cut -d- -f-4
abc-def-ghi-jkl

其他可能性:

$ echo "abc-def-ghi-jkl" | cut -d- -f2
def
$ echo "abc-def-ghi-jkl" | cut -d- -f3
ghi
$ echo "abc-def-ghi-jkl" | cut -d- -f4
jkl

【讨论】:

    【解决方案2】:

    怎么样

    LEVELS=3;
    echo "abc-def-ghi-jkl" | awk -F '-' "{x=$LEVELS; n=1; ORS=\"\"; while (n<=x) {print \$n; if (n<x) print \"-\"; n=n+1; }}"
    

    【讨论】:

      【解决方案3】:

      这可能对你有用:

      a=1;b=2;c=3;d=4
      echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$a"';s/\n.*//'          
      abc
      echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$b"';s/\n.*//'
      abc-def
      echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$c"';s/\n.*//'
      abc-def-ghi
      echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$d"';s/\n.*//'
      abc-def-ghi-jkl
      

      【讨论】:

        猜你喜欢
        • 2018-02-05
        • 2015-08-01
        • 2023-04-03
        • 2017-01-31
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 2015-01-29
        • 1970-01-01
        相关资源
        最近更新 更多