带有bash的正则表达式从多行文件中获取特定字符串并存储为var

时间:2018-05-09 16:30:33

标签: bash shell sh

我有一个工作脚本可以存储在var中的单个字符串,而不包含回车或多行文件的空格或表格:git配置文件。

但它不再有效,因为github改变了该文件的语法。

目前的文件内容如下:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github.com:user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*
#commented line

我目前用于提取所需字符串的内容:

var3=$(sed 's/^[ \t]*//' .git/config | sed ':a;N;$!ba;s/\n//g' | sed -rn 's/.*https:\/\/(.*?)fetch.*/\1/p')
echo "this is repo" 
echo $var3

我希望它返回:

"this is repo"
"git@github.com:user/repo.git"

我得到了什么:

"this is repo"
""

1 个答案:

答案 0 :(得分:2)

你可以这样做:

echo -e "\"this is repo\"\n\"$(sed -n "s/.*url = \(.*\)/\1/p" inputfile.txt)\""

输出:

"this is repo"
"git@github.com:user/repo.git"

sed的命令:sed -n s/.*url = \(.*\)/\1/p将打印以任何内容开头的行(.*),后跟url =后跟一个网址。匹配的行将被URL替换,该URL将被打印(通过sed' p命令)。