【发布时间】:2012-07-25 06:09:15
【问题描述】:
我有一个像这样的 TAB 分隔文件:
sample.rpt:
54 67 common/bin/my/home {{bla bla bla}} {bla bla} ReplaceMe
89 75 bad/rainy/day/out {{ some bla} } {some bla} DontreplaceMe
我希望对第 3 项进行正则表达式匹配,例如 common/bin/my/home
如果有匹配项,我想将第 6 项 Replace Me 替换为
我自己的文字如happy Home
另外,我的正则表达式将是一个 shell 变量,所以我需要一个命令 它接受正则表达式作为变量
项目可能有空格或反斜杠,文件是 Tab 分开。
为了实现这一点,我使用了以下 awk one-liner:
下面我正在检查字段 3 是否与 drv 指定的模式匹配, 然后做大括号中的任何事情{}
awk -F "\t" -v drv=$mod_pat '$3 ~ drv \
{ OFS= "\t"; $6 = " happy_home"; print;}' sample.rpt
现在的问题是,如果 模式不匹配。这可能在同一个命令中吗?
我试过了:
awk -F "\t" -v drv=$mod_pat \
'if ($3 ~ drv) { OFS= "\t"; $6 = " happy_home"; print;} else {print;}' sample.rpt
但是它抛出解析错误。可能是 awk 语法有问题。
【问题讨论】:
-
formatting help 以提高可读性。
标签: shell replace sed awk match