Awk grep匹配模式后的下一个单词,直到第一个空格
我想在模块后面找到单词,在那里 模块和要匹配的字之间可以有一个或多个空格 待匹配单词与下一个单词之间的单个空格 要匹配的单词可以是任何模式Awk grep匹配模式后的下一个单词,直到第一个空格,awk,grep,Awk,Grep,我想在模块后面找到单词,在那里 模块和要匹配的字之间可以有一个或多个空格 待匹配单词与下一个单词之间的单个空格 要匹配的单词可以是任何模式 HAL_POINT ITERATION IMPLEMENTED VERSION MODULE 1.2.3/4 OLKI 9FEB17 3MAR2018 3.2.6 CHK_PONT VALUES IMPLEMENTED VERSION MODULE 350/4 OLKI 9FEB17 3APR2018 3.2.6 HAL_POINT ITERA
HAL_POINT ITERATION IMPLEMENTED VERSION MODULE 1.2.3/4 OLKI 9FEB17 3MAR2018
3.2.6
CHK_PONT VALUES IMPLEMENTED VERSION MODULE 350/4 OLKI 9FEB17 3APR2018
3.2.6
HAL_POINT ITERATION JIO_PO POINT MODULE RT/6T OLKI 9FEB17 3MAR2018
3
我试过了
echo $variable | grep -oP '(?<=MODULE\s)\d.\d.\d\/\d'
及
第一行,但我希望它更优雅和通用
要匹配的字是1.2.3/4或350/4或RT/6T如果您非常确定这些字是否不受空间限制,则可以使用awk,因为默认情况下,awk将输入行中的字段拆分为一个空格字符。对于给定的输入,您只需要
awk '{ for( i=1; i<=NF ;i++ ) if ( $i == "MODULE" ) { print $(i+1); break } }'
请参阅针对给定输入的工作说明。如果您非常确定单词是否不受空格限制,则可以使用awk,因为默认情况下,awk将输入行中的字段拆分为一个空格字符。对于给定的输入,您只需要
awk '{ for( i=1; i<=NF ;i++ ) if ( $i == "MODULE" ) { print $(i+1); break } }'
请参阅针对给定输入的工作方法。和另一种不循环的awk方法 假设您的文本位于名为“小悟空”的文件中:
另一种awk方法,没有循环 假设您的文本位于名为“小悟空”的文件中: 您可以使用grep:Here\K将匹配但忽略其左侧的文本,[^]+表示它将匹配除空白以外的任何字符-o是只打印匹配的文本
grep -oP 'MODULE\s+\K[^ ]+'
您可以使用grep:Here\K将匹配但忽略其左侧的文本,[^]+表示它将匹配除空白以外的任何字符-o是只打印匹配的文本
grep -oP 'MODULE\s+\K[^ ]+'
请你也试一下下面的内容好吗
awk 'sub(/.*MODULE +/,"") && sub(/ +.*/,"")' Input_file
说明:将替换放在当前行中,用于将字符串模块中的所有内容都更改为NULL,并再次提到sub,用于将从空格到行尾的所有内容都替换为NULL。因此,如果两者之间存在替换发生和条件,则不会提及任何操作,因此默认情况下会打印该行。请您也尝试一次以下操作
awk 'sub(/.*MODULE +/,"") && sub(/ +.*/,"")' Input_file
说明:将替换放在当前行中,用于将字符串模块中的所有内容都更改为NULL,并再次提到sub,用于将从空格到行尾的所有内容都替换为NULL。因此,如果替换发生和条件都存在于它们之间,则不会提及任何操作,因此默认情况下会打印该行