代码: 全选
:s/[0-9]\([a-z]\)[0-9]/\1/
我尝试了
代码: 全选
{
str = "1212abcsdwer897897"
sub(/[0-9]([a-z])[0-9]/, /\1/, str)
print str
}
把“/\1/”改成“"\1"”,结果输出了相当于C语言里'\x01'的东西
要怎样才能把 ( ) 里匹配的字取出来?
[c]#!/bin/awk -f
# USAGE:
# scc file.s.cc [ options ]
#
# OPTIONS:
# -c clean. Delete file.h and file.cc generated from file.s.cc
BEGIN {
if (ARGC < 2) {
print "You must specify an scc file!"
exit 1
}
file_scc = ARGV[1]
if (file_scc !~ /\.s\.cc$/) {
print file_scc ": it is not an scc file!"
exit 2
}
file_cc = file_h = file_scc
sub(/\.s\.cc$/, ".cc", file_cc)
sub(/\.s\.cc$/, ".h", file_h )
if (ARGV[2] == "-c")
exit system("rm -f " file_cc " " file_h)
print "// cc generated by scc" > file_cc
print "#include \"" file_h "\"" >> file_cc
print "// h generated by scc" > file_h
stat = 0
}
{
if (stat == 0) { # Normal mode
if ($0 ~ /^extern:/) {
sub(/^extern:[[:blank:]]*/, "")
print $0 >> file_cc
sub(/[[:blank:]]*=[^,;"]+[[:blank:]]*/, "")
sub(/=?".*?"/, "")
sub(/\(.*?\)/, "")
print "extern " $0 >> file_h
}
else if ($0 ~ /^func:/) {
sub(/^func:[[:blank:]]*/, "")
print $0 >> file_h
sub(/[[:blank:]]*=[^,;"]+[[:blank:]]*/, "")
sub(/=?".*?"/, "")
print $0 >> file_cc
}
else if ($0 ~ /^[[:blank:]]*class/) {
print $0 >> file_h
class_name = $0
# TODO: Fixme
sub(/^.*?class[[:blank:]]+([a-zA-Z0-9_]+).*$/, /\1/, class_name)
print class_name # DEBUG
}
else
print $0 >> file_cc
}
}[/c](最后一个 else if 后面的 sub 句)