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

时间:2017-03-27 17:15:26

标签: unix awk sed grep csh

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

我正在寻找一种方法来提取此字符串的文本文件中的第一次出现,以var_name开头,以,结尾(但我不知道#39; t想要输出中的逗号。

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

输出:var_name

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

输出:var_name_TEXT

4 个答案:

答案 0 :(得分:1)

我建议使用GNU grep:

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

答案 1 :(得分:1)

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

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

PS。你也必须在正则表达式中包含空格。

答案 2 :(得分:0)

仅打印字段(例如,仅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,以便在第一次匹配后退出。

答案 3 :(得分:0)

你需要的只是(GNU awk):

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