使用sed从文本文件中获取参数值

时间:2014-11-03 07:27:08

标签: bash shell sed

我正在尝试从文本文件中提取参数的值。

下面是我的文本文件,其中uri_param作为参数。

application.txt
---------------
uri_param=frontier://tenant=stripe;env=qa;svc=new-service@stripe-ftr-qa.stripe.nxz.com:80

command:
--------
egrep ^uri_param application.txt | sed -e 's/.*=//'

我希望在第一个=之后输出frontier://tenant=stripe;env=qa;svc=new-service@stripe-ftr-qa.stripe.nxz.com:80作为输出,即new-service@stripe-ftr-qa.stripe.nxz.com:80,但我得到的输出是=

我该如何解决这个问题?我到现在所发现的是。* in sed是贪婪的,它将匹配{{1}}之后的最长字符串。

4 个答案:

答案 0 :(得分:2)

sed -n '/^uri_param=/ {s///p;q;}' YourFile
  • 仅提取uri_param的第一次出现,删除此uri_param =(替换为空)并打印然后退出。
  • 确定中小型文件(grep在100 Mb这样的大文件上足够快)

答案 1 :(得分:1)

你可以试试这种方式

sed -r s'/[^=]+.(.*)/\1/g' File_Name

答案 2 :(得分:1)

sed -r 's/^[_0-9a-zA-Z]+=//g' File_Name

答案 3 :(得分:1)

我们可以在grep部分过滤它:

grep -o "^uri_param=.*:[0-9]\{1,\}" infile|sed -e "s/^uri_param=//"

或者使用更灵活的工具,例如gawk

gawk 'match($0, "^uri_param=(.*:[0-9]+)", r){print r[1]}' infile

注意:如果url未使用端口号完成,则应调整pattern