当我尝试使用下面的命令替换字符串时,所有字符串都被替换为具有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
答案 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