添加" 一次字符串在多行中使用 SED 匹配



当我尝试使用以下命令替换字符串时,所有字符串都被替换了,该字符串具有 0.但是,我只需要替换以 0 开头的字符串和字母数字的组合。请帮助排除其他人。请在我使用的下面找到 sed 命令。

sed -r 's:((0w+)):"&":g'  test >test.log

输入文件:测试

0INTEL  GC  P   0servername     0.000       0I30019     12/02/15
0INTEL  GC  P   0servername     0.000       0I30019     12/02/15

预期输出:测试.log

"0INTEL"    GC  P   "0servername"   0.000       I30019      12/02/15
"0INTEL"    GC  P   "0servername"   0.000       I30019      12/02/15

实际输出:

"0INTEL"    GC  P   "0servername"   0."000"     I30019      12/"02"/15
"0INTEL"    GC  P   "0servername"   0."000"     I30019      12/"02"/15

带有 awk .对于所有字段,如果字段与模式匹配,则添加引号。最后打印行(1表示默认操作,即打印行(

awk '{ for (i=1;i<=NF;i++) if ($i ~ /^0[A-Za-z0-9]*$/) $i="""$i""" } 1' file

您的"预期输出"似乎有错误。由于某种原因,"0I30019"中的前导 0 已被删除。否则,您需要的是这样的东西:

sed -r 's/((0[A-Za-z][A-Za-z0-9]*))/"&"/g' text

根据您的示例,前导 0 之后的第一个字符应该是字母表,但单词之后可以包含数字字符。正则表达式反映了这一要求。由此产生的输出:

"0INTEL" GC P "0servername" 0.000 "0I30019" 12/02/15 "0INTEL" GC P "0servername" 0.000 "0I30019" 12/02/15

只是另一个尴尬的提议。

awk '{sub(/0INTEL/,"420INTEL42")sub(/0servername/,"420servername42")}1' file
"0INTEL"  GC  P   "0servername"     0.000       0I30019     12/02/15
"0INTEL"  GC  P   "0servername"     0.000       0I30019     12/02/15

最新更新