awk:如何使用空格进行模式匹配
我是awk的新手,我的目的是对文件中的以下内容执行模式匹配。 模式应获得具有vdd*或vss*的任何行 我尝试在awk中跟踪模式vdd,,但没有成功awk:如何使用空格进行模式匹配,awk,Awk,我是awk的新手,我的目的是对文件中的以下内容执行模式匹配。 模式应获得具有vdd*或vss*的任何行 我尝试在awk中跟踪模式vdd,,但没有成功 if(($1~"inout/svdd") || ($1~"input/svdd") || ($1~"output/svdd")) { do_something } 样本输入: input tprImeasbuf; output ibias7; inout vssd; output vddpminvref; input disa
if(($1~"inout/svdd") || ($1~"input/svdd") || ($1~"output/svdd")) {
do_something
}
样本输入:
input tprImeasbuf;
output ibias7;
inout vssd;
output vddpminvref;
input disablevdda1v8;
output ibiaspowerreferencescp5;
output vddaok;
input tprImeasPLL;
inout mtp_isense;
output ibiaspowerreferencescp3;
output enablelevelshifts;
output poff;
inout vddp;
input ResGainSel412;
output icasc_ch5;
inout Rref;
output icasc_ch3;
output ibiasshutdowncomparator;
output vdddok;
input tpr_vbgbufout;
output iref3v3_ch4;
inout atb5;
input tprIrefcurbuf;
output ibiaspowerreference4;
input tpr_vdddcompextref;
input tprIrefcurPLL;
预期产出:
vssd
vddpminvref
vddaok
vddp
vdddok
这就是你所期待的吗
$ awk -F" " ' $0~/vdd|vss/ { print } ' in_file
inout vssd;
output vddpminvref;
input disablevdda1v8;
output vddaok;
inout vddp;
output vdddok;
input tpr_vdddcompextref;
$
EDIT1:
$ awk -F" " ' $1~/input|inout|output/ && $2~/^(vdd|vss)/ { print } ' in_file
inout vssd;
output vddpminvref;
output vddaok;
inout vddp;
output vdddok;
这就是你所期待的吗
$ awk -F" " ' $0~/vdd|vss/ { print } ' in_file
inout vssd;
output vddpminvref;
input disablevdda1v8;
output vddaok;
inout vddp;
output vdddok;
input tpr_vdddcompextref;
$
EDIT1:
$ awk -F" " ' $1~/input|inout|output/ && $2~/^(vdd|vss)/ { print } ' in_file
inout vssd;
output vddpminvref;
output vddaok;
inout vddp;
output vdddok;
您可能想使用
grep
进行这种简单的模式匹配:
grep -o -E ' v(dd|ss)[^ ;]*' file
-o
用于打印匹配的正则表达式(而不是整行)
-E
启用扩展正则表达式(ERE)。您可能想使用grep
进行这种简单的模式匹配:
grep -o -E ' v(dd|ss)[^ ;]*' file
-o
用于打印匹配的正则表达式(而不是整行)
-E
启用扩展正则表达式(ERE)
\r
用于处理您发布的示例输入使用了\r\n
换行符这一事实。如果您的实际输入不是这样,那么只需删除\r
。我强烈建议在您的文件上运行dos2unix
,以便在运行awk或任何其他UNIX工具之前剥离这些\r
\r
用于处理您发布的示例输入使用了\r\n
换行符这一事实。如果您的实际输入不是这样,那么只需删除\r
。我强烈建议在您的文件上运行dos2unix
,以便在运行awk或任何其他UNIX工具之前剥离这些\r
。您的预期输出是什么?vdd的预期输出:vddpminvref vddok vddp vdddok仅在输入、输出或输入输出后命名,并且应该仅以vdd或vssSee my update开始@Danish此静默可能与OP有关,两者都应重写以表示预期输出。啊,抱歉,我没有引用,您的预期输出是什么?vdd的预期输出:vddpminvref vddok vddp vdddok仅在输入、输出或输入输出后命名,并且应仅以vdd或vssSee my update开始@Danish此停顿可能与OP有关,两者都应重写以表示预期的输出。啊,抱歉,我没有引用,不,我只想在输入、输入或输出后输入名称,还有一个名称,该名称应仅以vdd或vss开头。请在回答中检查my EDIT1谢谢,该名称也可以在awk脚本中使用?如果问题中的文本是示例输入,那么为输入中的每个可能值测试$1有什么意义?是的,问题中提到的文本是示例输入。需要执行测试,以仅获取那些字符串以vdd或vss开头的行,基于此,我正在创建一个输出文件。如果输入文件中的行包含以vdd或vss开头的字符串,请在输出文件中添加一行pg_pin语法,对于其余不匹配的行,请仅添加pin语法。否,我只需要输入、输入或输出后的名称,还有一个名称,该名称应仅以vdd或vss开头。请在回答中检查my EDIT1谢谢,该名称也可以在awk脚本中使用?如果问题中的文本是示例输入,那么为输入中的每个可能值测试$1有什么意义?是的,问题中提到的文本是示例输入。需要执行测试,以仅获取那些字符串以vdd或vss开头的行,基于此,我正在创建一个输出文件。如果输入文件中的行包含以vdd或vss开头的字符串,请使用pg_pin语法在输出文件中添加一行,对于不匹配add only pin语法的其余行,您可能希望尝试在发布的示例输入上运行该行,因为它不会产生预期的输出。我不知道如何使用grep来完成这项任务,除非您仅使用GNU和高度实验性的-P
选项,并使用一些复杂的向前看/向后看/左右看/任何regexp。哦,等等-单词边界可能会拯救它。当然,它仍然会匹配行的任何部分,而不仅仅是第二个字段,但如果所有OPs输入看起来都像示例一样,那么这可能就没问题了。@EdMorton描述(该模式应该得到任何具有vdd*或vss*的行)而且预期的结果相当混乱……您可能希望尝试在发布的示例输入上运行它,因为它不会产生预期的输出。我不知道如何使用grep来完成这项任务,除非您仅使用GNU和高度实验性的-P
选项,并使用一些复杂的向前看/向后看/左右看/任何regexp。哦,等等-单词边界可能会拯救它。当然,它仍然匹配于行的任何部分,而不是第2个字段,但是如果所有OPs输入看起来都像示例,那么可能就可以了。@EdMorton描述(模式应该得到任何具有vdd*或vss*)的行,预期相当混乱。。。