Linux 在特定字符后剪切字符串,但仅剪切一个字段
这是一个vhost文件。这是我得到的输出 服务器名uat3-dam-something1.prg-dc.brb.com 你好,, 我想知道如何从这个输出中删减,只剩下这一部分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 说
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
表示“任何字符0次或以上,后跟*(something.*)
和任何其他字符0次或以上”something
仅用于打印括号内的匹配部分\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