我有一个变量名称,它出现在文本文件的多个位置。此变量始终以相同的字符串开头,但并不总是以相同的字符结尾。例如,它可以是var_name
或var_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
答案 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_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
,以便在第一次匹配后退出。
答案 3 :(得分:0)
你需要的只是(GNU awk):
$ awk 'match($0,/\<var_name[^,]*/,a){print a[0]; exit}' file
var_name_TEXT