Linux 在特定字符后剪切字符串,但仅剪切一个字段

Linux 在特定字符后剪切字符串,但仅剪切一个字段,linux,bash,devops,Linux,Bash,Devops,这是一个vhost文件。这是我得到的输出 服务器名uat3-dam-something1.prg-dc.brb.com 你好,, 我想知道如何从这个输出中删减,只剩下这一部分 something1.prg-dc.brb.com 记住,“某物”可以是“某物”或“某物”。所以长度操作不起作用。尝试使用cut命令和AWK,但无效。我很高兴收到bash专家的提示:)请您尝试以下内容,仅使用提供的样本编写和测试 awk -F'uat3-dam-' '{print $NF}' Input_file 说

这是一个vhost文件。这是我得到的输出 服务器名uat3-dam-something1.prg-dc.brb.com

你好,, 我想知道如何从这个输出中删减,只剩下这一部分

 something1.prg-dc.brb.com

记住,“某物”可以是“某物”或“某物”。所以长度操作不起作用。尝试使用cut命令和AWK,但无效。我很高兴收到bash专家的提示:)

请您尝试以下内容,仅使用提供的样本编写和测试

awk -F'uat3-dam-' '{print $NF}' Input_file
说明:制作
uat3 dam-
作为字段分隔符,并打印最后一个字段



第二种解决方案:

像这样:

grep -o 'something.*' file
或者更具体地说:

grep -oE 'something[0-9]+\..*' file
输出: 使用:

将返回:

something1.prg-dc.brb.com
如果您更改字符串(如您所述):

它将继续返回:

something111111.prg-dc.brb.com
$echo'ServerName uat3-dam-something1.prg dc.brb.com'| awk-F-'{sub(“*”$2 FS,”)}1'
something 1.prg-dc.brb.com
这将起作用:

echo "ServerName uat3-dam-something1.prg-dc.brb.com" | sed -E 's/.*(something.*)/\1/'
或者,如果字符串位于名为
file

sed -E 's/.*(something.*)/\1/' file
说明:

  • -E
    用于扩展正则表达式
  • *(something.*)
    表示“任何字符0次或以上,后跟
    something
    和任何其他字符0次或以上”
  • \1
    仅用于打印括号内的匹配部分
    • 您还可以使用:

      echo ${test#*dam-}
      
      例如:

      test="ServerName uat3-dam-something1.prg-dc.brb.com"
      echo ${test#*dam-}
      
      其中:

      something1.prg-dc.brb.com
      

      请注意,相反的版本是
      echo${test%something*}

      输入的哪些部分是固定的,哪些部分是可变的?似乎
      something[0-9]+\。
      是唯一固定的部分,只是一个假设虽然这段代码可能解决OP的问题,但最好包含一个关于代码如何解决OP问题的解释。通过这种方式,未来的访问者可以从您的帖子中学习,并将其应用到自己的代码中。因此,它不是一种编码服务,而是一种知识资源。此外,高质量、完整的答案更有可能被提升。这些特性,以及所有帖子都是独立的要求,是SO作为一个平台的一些优势,使其区别于论坛。您可以编辑以添加其他信息和/或用源文档补充您的解释。可以,但您可以解释吗?当然可以。通过指定
      cut-d\--f3-4
      我要做的是将
      -
      字符设置为我的字符串的分隔符和
      3-4
      我希望命令显示的字段,过滤字符串的其余部分。也就是说,它只匹配给定字符串“ServerName uat3 dam something.prg dc.brb.com”,因为
      -f1
      将是
      ServerName uat3
      -f2
      将是
      dam
      -f3
      将是
      something.prg
      ,而
      -f4
      将是
      dc.brb.com
      sed -E 's/.*(something.*)/\1/' file
      
      echo ${test#*dam-}
      
      test="ServerName uat3-dam-something1.prg-dc.brb.com"
      echo ${test#*dam-}
      
      something1.prg-dc.brb.com