添加"一旦字符串在多行中使用sed匹配

时间:2017-11-16 06:30:32

标签: bash sed

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

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

输入文件:test

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

预期输出:test.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

3 个答案:

答案 0 :(得分:0)

您的“预期输出”似乎有错误。由于某种原因,“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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

另一个awk提案。

awk '{sub(/0INTEL/,"\0420INTEL\042")sub(/0servername/,"\0420servername\042")}1' file

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