如何获取使用 bash 标记的变量的值
How to grab the value of a variable that is tabbed using bash
我有一个名为 ver.go 的 golang 文件,由 1 个变量组成。
const (
ver = "1.1.1"
)
我希望能够使用 bash 命令输出 1.1.1。如果我们去掉开头的选项卡和像这样的 spaces
,我可以毫无问题地做到这一点
const (
ver="1.1.1"
)
通过使用此命令 awk -F= '/^ver=/{print }' ver.go | sed -e 's/^"//' -e 's/"$//'
但是,由于它必须使用 gofmt
正确格式化,所以我似乎无法用其中的选项卡以及等号 [=15= 之后的 space 弄清楚]
感谢任何帮助。
你可以使用这个 awk:
awk -F= ' ~ /^[[:blank:]]*ver/{gsub(/["[:blank:]]+/, ""); print }' file
1.1.1
如果您只想从文件 ver.go
中获取 "1.1.1"
,一个简单的解决方案是让 sed
为您完成工作。您可以使用带有单个反向引用的普通替换形式来捕获 "1.1.1"
并将其重新插入作为整行的替换。您可以使用 sed -n
来抑制正常 pattern-space 的输出并在替换后添加 p
以便在成功替换后只有与您的 REGEX 匹配的行打印出来,例如
sed -n 's/^[[:space:]]*ver[[:space:]]*=[[:space:]]*"\([^"][^"]*\).*$//p' ver.go
无论有没有 "ver"
之前的空格(或制表符),这都适用。
例子Use/Output
根据您的 ver.go
内容,您将获得:
$ sed -n 's/^[[:space:]]*ver[[:space:]]*=[[:space:]]*"\([^"][^"]*\).*$//p' ver.go
1.1.1
如果我误解了你的意思,请告诉我。如果您还有其他问题,请在下方发表评论。
使用 bash
和参数扩展删除所有 "
:
while read -r key x value; do [[ "$key" == "ver" ]] && echo "${value//\"/}"; done < ver.go
输出:
1.1.1
我有一个名为 ver.go 的 golang 文件,由 1 个变量组成。
const (
ver = "1.1.1"
)
我希望能够使用 bash 命令输出 1.1.1。如果我们去掉开头的选项卡和像这样的 spaces
,我可以毫无问题地做到这一点const (
ver="1.1.1"
)
通过使用此命令 awk -F= '/^ver=/{print }' ver.go | sed -e 's/^"//' -e 's/"$//'
但是,由于它必须使用 gofmt
正确格式化,所以我似乎无法用其中的选项卡以及等号 [=15= 之后的 space 弄清楚]
感谢任何帮助。
你可以使用这个 awk:
awk -F= ' ~ /^[[:blank:]]*ver/{gsub(/["[:blank:]]+/, ""); print }' file
1.1.1
如果您只想从文件 ver.go
中获取 "1.1.1"
,一个简单的解决方案是让 sed
为您完成工作。您可以使用带有单个反向引用的普通替换形式来捕获 "1.1.1"
并将其重新插入作为整行的替换。您可以使用 sed -n
来抑制正常 pattern-space 的输出并在替换后添加 p
以便在成功替换后只有与您的 REGEX 匹配的行打印出来,例如
sed -n 's/^[[:space:]]*ver[[:space:]]*=[[:space:]]*"\([^"][^"]*\).*$//p' ver.go
无论有没有 "ver"
之前的空格(或制表符),这都适用。
例子Use/Output
根据您的 ver.go
内容,您将获得:
$ sed -n 's/^[[:space:]]*ver[[:space:]]*=[[:space:]]*"\([^"][^"]*\).*$//p' ver.go
1.1.1
如果我误解了你的意思,请告诉我。如果您还有其他问题,请在下方发表评论。
使用 bash
和参数扩展删除所有 "
:
while read -r key x value; do [[ "$key" == "ver" ]] && echo "${value//\"/}"; done < ver.go
输出:
1.1.1