需要用双引号中的相同字符串替换文本文件中以0开头的所有字符串(除了having/and.) awk'{for(i=1;i

需要用双引号中的相同字符串替换文本文件中以0开头的所有字符串(除了having/and.) awk'{for(i=1;i,awk,Awk,是的,0099也应该被引用。我错忘了 说明: /^0[[:alnum:][^.\/]/ ^断言字符串开头的位置 0逐字匹配字符0 匹配下面列表中的单个字符[[:alnum:] [:alnum::匹配字母数字字符[a-zA-Z0-9] 匹配下面列表中不存在的单个字符[^.\/] 匹配字符。按字面意思 \/与字符/字面匹配 为什么不是用引号括起来的0099呢?是的,0099也应该用引号括起来。我错了。@AnilKumar请编辑问题而不是注释。。输入是多行还是单行?我不明白为什么Dinidu的编辑被

是的,0099也应该被引用。我错忘了

说明:

/^0[[:alnum:][^.\/]/

  • ^
    断言字符串开头的位置
  • 0
    逐字匹配字符0
  • 匹配下面列表中的单个字符
    [[:alnum:]
    [:alnum::
    匹配字母数字字符
    [a-zA-Z0-9]
  • 匹配下面列表中不存在的单个字符
    [^.\/]
    匹配字符。按字面意思
    \/
    与字符/字面匹配

为什么不是用引号括起来的
0099
呢?是的,0099也应该用引号括起来。我错了。@AnilKumar请编辑问题而不是注释。。输入是多行还是单行?我不明白为什么Dinidu的编辑被批准了。您给出的两个命令都工作得很好,但如何合并两个命令的效果同时,第一个命令只放引号,第二个命令只保留空格。请参见编辑,perl命令保留空格并添加引号。您确实应该将所有这些详细信息放在问题中,而不是在注释中进行解释。您可以自己看到,格式无法在注释中传达……并清楚地解释您的r要求,如果您当前的示例不足以解释此问题,请更改此示例Perl命令在linux的bash shell上运行良好,但在HP UX的root/sbin/sh shell上运行不正常(无双引号)#echo$SHELL/sbin/sh/tmp#perl-lpe的#(^ |\h)\K0[^./\h]+(?=\h |$)#“$&”#g'test1 1234 012345 0.000 01/02/03 01234 05554567 0qwertyu 0099 0000 0000121800.000000 099000 0123456789您给出的命令工作正常,但输出没有保留输入的第1行和第8行中字符串之间的间距。输入中制表符的间距在输出中转换为单字符空间t、 添加
-vofs=“\t”
成为
awk-vq=”'-vofs=“\t”
    awk '{for(i=1;i<=NF;i++){if($i~/^0[a-z,0-9][a-z,0-9]/){print $i}}}' test1 > test3

 doWork()

 { rm /tmp/test1 && awk '{sub(/'$I'/, "\"'$I'\"", $0); print}' >test1;} < test1

 for I in `cat /tmp/test3`
 do doWork;
 done;
$ awk -v dq='"' '{for(i=1;i<=NF;i++) if($i~/^0/ && $i!~/[./]/) $i=dq $i dq} 1' file
1234 "012345"
0.000
01/02/03
"01234"
"05554567"
"0qwertyu"
"0099"
"0000" "000012"
1800.000000
"099000"
"0123456789"
$ perl -lpe 's#(^|\h)\K0[^./\h]+(?=\h|$)#"$&"#g' file
1234    "012345"
0.000
01/02/03
"01234"
"05554567"
"0qwertyu"
"0099"
"0000"  "000012"
1800.000000
"099000"
"0123456789"
$ awk -v q='"' '{for(i=1; i<=NF; i++)if($i ~/^0[[:alnum:]][^.\/]/)$i=q $i q}1' infile
1234 "012345"
0.000
01/02/03
"01234"
"05554567"
"0qwertyu"
"0099"
"0000" "000012"
1800.000000
"099000"
"0123456789"
$ cat infile
1234      012345
0.000
01/02/03
01234
05554567
0qwertyu
0099
0000           000012
1800.000000
099000
0123456789