正则表达式:对匹配的组执行操作

时间:2014-09-15 10:19:04

标签: java regex sed

我的文件中有数据,如:

...
Position(123)
...
Position(234)
...

我想更新此文件,如:

...
Position(1230)
...
Position(2340)
...

我可以使用Java来做到这一点。像:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexGroupOperation {
    public static void main(String[] args) {
        String[] inputLines = new String[5];
        inputLines[0] = "Some Random Text";
        inputLines[1] = "Position(789)";
        inputLines[2] = "Some More Random Text";
        inputLines[3] = "Position(123)";
        inputLines[4] = "Position(456)";

        Pattern p = Pattern.compile("Position\\(([0-9]+)\\)");
        for (String line : inputLines) {
            Matcher m = p.matcher(line);
            if (m.matches()) {
                System.out.println("Position(" + (Integer.valueOf(m.group(1)) * 10) + ")");
            } else {
                System.out.println(line);
            }
        }
    }
}

这里,我正在捕获我想要执行操作的字符串(组)部分。然后使用所需结果更新该组。

我想使用sed做同样的事情。是否可以对匹配的组执行操作,然后使用替换结果。

3 个答案:

答案 0 :(得分:0)

你可以尝试下面的awk命令。

$ awk -F[\(\)] '/[0-9]+/{var=$2;$2=var*10; print $1"("$2")"}!/[0-9]/' file
...
Position(1230)
...
Position(2340)
...

答案 1 :(得分:0)

使用awk:

awk -F 'Position\\(' 'NF>1{gsub(/.*/, "Position(" $2*10 ")")} 1' file
...
Position(1230)
...
Position(2340)
...

答案 2 :(得分:0)

sed 's/^Position([0-9]*/&0/' YourFile

如果是"只是"在位置(...)行的数量中添加0