检索以特定字符串开头的变量名称

Retrieving a variable name that starts with a specific string

我有一个变量名出现在文本文件的多个位置。此变量将始终以相同的字符串开头,但并不总是以相同的字符结尾。例如,它可以是 var_namevar_name_TEXT.

我正在寻找一种方法来提取此字符串的文本文件中 第一次出现 ,该字符串以 var_name 开头并以 , 结尾(但我不想在输出中使用逗号)。

示例 1:var_name, some_other_var, another_one, ....

输出:var_name

示例 2:var_name_TEXT, some_other_var, another_one, ...

输出:var_name_TEXT

我建议使用 GNU grep:

grep -o '\bvar_name[^,]*' file | head -n 1

要仅打印字段(即仅 var_namevar_name_TEXT;而不是包含它的行),您可以使用 awk:

awk -F, '{for (i=1;i<=NF;i++) if ($i~/^var_name/) print $i}' file

如果逗号前后确实有空格(如示例中所示),您可以更改为 awk 字段分隔符:

awk -F"[, ]+" '{for (i=1;i<=NF;i++) if ($i~/^var_name/) print $i}' file

您还可以使用带有词边界断言的 GNU grep:

grep -o '\bvar_name[^,]*' file

或 GNU awk:

awk '/\<var_name/' file

如果您希望只考虑一个,请将exit添加到awk或将-m 1添加到grep以在第一场比赛。

grep -oPm1 '\bvar_name[^, ]*(?=,)' file | head -1

匹配并只输出以var_name开头并以逗号结尾的变量,输出中不包含逗号,匹配第一行后退出并选择该行的第一个匹配项(如果有更多比一个)

ps。您还必须在正则表达式中包含 space。

你只需要 (GNU awk):

$ awk 'match([=10=],/\<var_name[^,]*/,a){print a[0]; exit}' file
var_name_TEXT