我想替换文本文件中的模式,并从模式中读取变量x
和y
,以将它们插入到我将要替换的模式中。
我想替换每一次:
Array<x, y> someArray;
以下内容:
Array<> someArray(x, y);
所以,例如这一行:
Array<3, 4> someArray;
将替换为:
Array<> someArray(3, 4);
如何使用awk或sed实现这一目标?
答案 0 :(得分:1)
sed
:
sed -E 's/^(Array)<([^>]+)>( someArray)/\1<>\3(\2)/' file
答案 1 :(得分:0)
$ cat r.sh
awk '
BEGIN {
b = "[ \t]+" # blank
i = "[_a-zA-Z0-9]+" # identifier: should match x, 1 and so on
}
{
parse()
if (OK)
printf "Array<> %s(%s, %s);\n", name, x, y
else
print $0
}
function parse() {
l = $0; OK = 1
n("Array")
n("<")
n(i); x = P
n(",")
n(i); y = P
n(">")
n(i); name = P
}
function n(p) {
if (!OK) return
n1(b); OK = 1 # skip blank
return n1(p)
}
function n1(p) {
p = "^" p
if (match(l, p)) P = n0()
else OK = 0
}
function n0( s) {
s = substr(l, 1, RLENGTH)
l = substr(l, RLENGTH + 1)
return s
}
' "$@"
用法
$ sh r.sh file
Array<> someArray(x, y);
Array<> someArray(3, 4);