Awk 需要在第一次出现的模式中提取文本
我有一个文件,它由以下几行组成:Awk 需要在第一次出现的模式中提取文本,awk,grep,Awk,Grep,我有一个文件,它由以下几行组成: part1 { CORE_LK0 } -group { LK0_GROUP } -module { 20rx } Ignore no3 { CORE_ft0 } -sync { n7 } 我需要在第一次出现{}时提取文本。 我试过这个: grep "{.*}" file.txt 我的输出: part1 { CORE_LK0 } -group { LK0_GROUP } -module { 20rx } Ignore no3 { CORE_ft0
part1 { CORE_LK0 } -group { LK0_GROUP } -module { 20rx }
Ignore no3 { CORE_ft0 } -sync { n7 }
我需要在第一次出现{}时提取文本。
我试过这个:
grep "{.*}" file.txt
我的输出:
part1 { CORE_LK0 } -group { LK0_GROUP } -module { 20rx }
Ignore no3 { CORE_ft0 } -sync { n7 }
但是所需的输出只需要grep第一次出现的{}:
CORE_LK0
CORE_ft0
有人能帮我吗。您可以使用
sed
来实现此目的:
sed -n 's/^[^{}]*{ *\([[:alnum:]_]*\) *}.*/\1/p' file > results
或者,如果在第一组花括号之间可以有除{
和}
以外的任何字符
sed -n 's/^[^{}]*{ *\([^{}]*\) *}.*/\1/p' file > results
看
详细信息
-抑制默认行输出(不匹配的行不会被打印)-n
-替换命令s/
-匹配^[^{}]*{*\([[:alnum:][u]*\)*}.*.
-字符串的开头^
-0个或多个字符,而不是[^{}]*
和{
}
-{*
和0个或更多空格{
-捕获组1:任何0个或更多字母、数字或\([[:alnum:]*\)
-0或更多空格和*}
}
-行的其余部分*
-将整行替换为第1组的内容\1
-打印组1中的值p
sed
:
sed -n 's/^[^{}]*{ *\([[:alnum:]_]*\) *}.*/\1/p' file > results
或者,如果在第一组花括号之间可以有除{
和}
以外的任何字符
sed -n 's/^[^{}]*{ *\([^{}]*\) *}.*/\1/p' file > results
看
详细信息
-抑制默认行输出(不匹配的行不会被打印)-n
-替换命令s/
-匹配^[^{}]*{*\([[:alnum:][u]*\)*}.*.
-字符串的开头^
-0个或多个字符,而不是[^{}]*
和{
}
-{*
和0个或更多空格{
-捕获组1:任何0个或更多字母、数字或\([[:alnum:]*\)
-0或更多空格和*}
}
-行的其余部分*
-将整行替换为第1组的内容\1
-打印组1中的值p
- 请您尝试以下内容
awk 'match($0,/{ [^}]*/){print substr($0,RSTART+2,RLENGTH-2)}' Input_file
说明:
第二种解决方案:只是为了好玩,建议只使用上述解决方案(使用GNU
grep编写,仅使用显示的样本进行测试)
你能试试下面的吗
awk 'match($0,/{ [^}]*/){print substr($0,RSTART+2,RLENGTH-2)}' Input_file
说明:
第二种解决方案:只是为了好玩,建议只使用上述解决方案(使用GNUgrep编写,仅使用显示的样本进行测试)
您可以使用Perl实现这一点:
$ perl -lnE 'say $1 if /^[^{]*\{([^}]*)\}/' file
CORE_LK0
CORE_ft0
正则表达式解释:
/^[^{]*\{([^}]*)\}/
^ start of line anchor
^ ^ character class
^ negated -- any character OTHER THAN {
^ * is 0 or more of that character class
^ \{ is a literal {
^ ^ ( ) capture group to define $1
^ ^ 0 or more characters OTHER THAN }
^ literal }
您可以使用Perl实现这一点:
$ perl -lnE 'say $1 if /^[^{]*\{([^}]*)\}/' file
CORE_LK0
CORE_ft0
正则表达式解释:
/^[^{]*\{([^}]*)\}/
^ start of line anchor
^ ^ character class
^ negated -- any character OTHER THAN {
^ * is 0 or more of that character class
^ \{ is a literal {
^ ^ ( ) capture group to define $1
^ ^ 0 or more characters OTHER THAN }
^ literal }
试试sed-n的/^[^{}]*{\([^{}]*\}.*/\1/p'file.txt
Thaks@Wiktor Stribizew。它起作用了。但是我没有正确理解上面的命令。我已经在下面进行了解释。请尝试sed-n的/^[^{}]*{\([^{}]*\)}.*/\1/p'file.txt
Thaks@Wiktor Stribizew。它起作用了。但是我没有正确理解上面的命令。我已经在下面解释了。