当我尝试使用以下命令替换字符串时,所有字符串都被替换了,该字符串具有 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/," 420INTEL 42")sub(/0servername/," 420servername 42")}1' file
"0INTEL" GC P "0servername" 0.000 0I30019 12/02/15
"0INTEL" GC P "0servername" 0.000 0I30019 12/02/15