检索以特定字符串开头的变量名称
Retrieving a variable name that starts with a specific string
我有一个变量名出现在文本文件的多个位置。此变量将始终以相同的字符串开头,但并不总是以相同的字符结尾。例如,它可以是 var_name
或 var_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_name
或 var_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
我有一个变量名出现在文本文件的多个位置。此变量将始终以相同的字符串开头,但并不总是以相同的字符结尾。例如,它可以是 var_name
或 var_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_name
或 var_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