如何替换unix文件中的第二个现有模式

时间:2014-11-07 00:48:29

标签: unix

我想在unix中替换第二种模式。 输入文件: -

12345|45345|TaskID|dksj|kdjfdsjf|TaskID|12 
1245|425345|TaskID|dksj|kdjfdsjf|TaskID|12
1234|25345|TaskID|dksj|TaskID|kdjfdsjf|12|TaskID
123425|65345|TaskID|dksj|kdjfdsjf|12|TaskID
123425|15325|TaskID|dksj|kdjfdsjf|12

示例输出文件: -

12345|45345|TaskID|dksj|kdjfdsjf|TaskID1|12
1245|425345|TaskID2|dksj|kdjfdsjf|TaskID3|12
1234|25345|TaskID|dksj|TaskID1|kdjfdsjf|12|TaskID2
123425|65345|TaskID3|dksj|kdjfdsjf|12|TaskID4
123425|15325|TaskID|dksj|kdjfdsjf|12

1 个答案:

答案 0 :(得分:0)

您的示例与您的问题不符, 所以我只展示如何替换给定模式的每一个匹配

使用awk。它是用于命令行文本处理的非常强大的工具

replace.sh如下:

cat | awk -v search="$1" -v repl="$2" '
BEGIN {
        flag = 0
}
{
        split($0, a, search)
        len = length(a)
        for (f = 1; f < len; f += 1) {
                printf "%s%s", a[f], (flag % 2 == 0 ? search : repl)
                flag += 1
        }
        printf "%s%s", a[len], ORS
}
'

cat input.txt | ./replace.sh TaskID TaskID1