如何根据模式的一部分用字符串替换模式?

时间:2011-04-01 10:46:49

标签: awk gawk

我有以下问题。我正在解释输入文件,现在我遇到了这个: 我需要将%%BLANKx翻译为x个空格。

因此,在输入文件中,我找到例如%%BLANK8,我需要将%%BLANK8替换为8个空格,%%BLANK10替换为10个空格等

4 个答案:

答案 0 :(得分:0)

您可以在%% BLANK标记上拆分字符串。 之后,您可以读取任何令牌中的第一个数字并转换它们的空格。 现在,您可以在新String中连接每个标记。

答案 1 :(得分:0)

试试这个。我没有详尽地测试过

$ awk '/BLANK/{ match($0,/%%BLANK([0-9]+)/,a);s=sprintf("%"a[1]"s","") ; gsub(a[0],s)}1' file

或Ruby(1.9 +)

$ ruby -ne 'print $_.gsub(/%%BLANK(\d+)/){|m|" "*$1.to_i}' file

答案 2 :(得分:0)

perl -pe 's/%%BLANK(\d+)/" " x $1/e' input_file

答案 3 :(得分:0)

使用“%% BLANK”作为记录分隔符,知道任何以数字开头的新记录是否用空格替换数字。

awk 'BEGIN {RS="%%BLANK";ORS=""}{MatchFound=match($0,"^[0-9]+",Matched_string);if(MatchFound){sub(Matched_string[0],"",$0);for (i=0;i<Matched_string[0];i++){$0=" "$0};print $0}else{print $0}}' InputFile.txt