【问题标题】:shell script to filter input variables and cut as per the requirement用于过滤输入变量并根据要求进行剪切的 shell 脚本
【发布时间】:2021-10-07 10:35:10
【问题描述】:

我有一个要求,其中有 2 个不同的 repo 名称,例如 app-na-repo1 和 wcm-repo2。我需要删除两个 repo 的首字母并将其余部分指定为域。 即

repo=app-na-repo1-com-test or wcm-repo2-com-test

我需要使用命令对其进行过滤、剪切并分配给域

无论输入如何,最终输出都应该是这个 repo 中的任何一个

domain=repo1-com-test or repo2-com-test

尝试了几件事,但没有成功。任何帮助,将不胜感激。 我们按照下面的方式进行剪切,但是如何设置初始过滤器,尝试了 if else 但由于无法过滤而无法正常工作

domain=$(echo "$repo" | cut -c8-)

domain=$(echo "$repo" | cut -c4-)

【问题讨论】:

  • 您可以通过regexcrossword.com 学习正则表达式。然后您可以编写一个正则表达式来匹配输入,了解反向引用并使用sed 来匹配和替换该行。
  • 谢谢肯定会的,我对正则表达式很陌生,正在努力学习。感谢分享正则表达式网站详细信息

标签: linux bash shell unix


【解决方案1】:

当要删除两个固定字符串时,可以使用sed,如

for repo in 'app-na-repo1-com-test' 'wcm-repo2-com-test'; do
  printf "%-30s => " "${repo}"
  sed -r 's/^(app-na-)|(wcm-)//g' <<< "${repo}"
done

结果:

app-na-repo1-com-test          => repo1-com-test
wcm-repo2-com-test             => repo2-com-test

【讨论】:

  • 非常感谢,这就是我要找的,domain=$(sed -r 's/^(app-na-)|(wcm-)//g'
  • 当你想从结果中删除com-,你可以使用domain=$(sed -r 's/^(app-na-)|(wcm-)//g; s/([^-]*).*-(.*)/\1-\2/'' &lt;&lt;&lt; "${repo}")
【解决方案2】:
$ echo "app-na-repo1/wcm-repo2" | sed -e 's/[^\/]*-//g'
repo1/repo2

【讨论】:

  • 谢谢,但是如果字符串是 app-na-repo1-test-com 而我只需要 repo1-com 怎么办,我对正则表达式真的很陌生,抱歉还有一个问题。我的问题是它应该只删除 app-na- 和 wcm- 并剩下应该打印的任何部分
  • 正则表达式在这种情况下不起作用,域可能有不同的级别,例如 sub-abc-com abc-com
猜你喜欢
  • 1970-01-01
  • 2015-03-16
  • 2016-10-22
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多