1

我正在尝试使用 sed /awk 命令来解析我的文本文件。我想在同一行的两个模式之间打印文本,并在其中添加一些字符。例如:如果我的线路是

uint8_t aucRepresentationName[NR_UNIT_REPRESENTATIONS][CHARS_P_REPRESENTATION];

或者

uint8_t aucRepresentationName [NR_UNIT_REPRESENTATIONS] [CHARS_P_REPRESENTATION];

我要打印NR_UNIT_REPRESENTATIONS*CHARS_P_REPRESENTATION

所以,我盯着 sed 命令在\n之后插入行分隔符'[',在合适的物种中划分行,然后尝试再次解析它。

echo "bla bla bla [AK] bla bla bla bla [A_K] bla bla bla" | sed 's/\[/\n&/g;' | awk '{sub(/.*\[ /,"");sub(/\].*/,"");print;}'

echo "bla bla bla [AK] bla bla bla bla [A_K] bla bla bla" | sed 's/\[/\n&/g;' | sed -e 's/^.*\[ //g;s/ \].*$//g'

而且它并不总是二维数组,它可以是无或单/双维数组,我需要首先有多少[]实例,如果它的0然后写1,如果它的单维数组然后ex A [SIZE]然后写入 SIZE 其两个维度数组 ex:A[RAW][COL] 写入 RAW*COL..

我想知道我的命令有什么问题?或任何其他选择,因为它将帮助我进一步学习 sed。

阿姆鲁塔

4

4 回答 4

1

用这个:

perl -lne 'push @a,/\[([^\]]*)\]/g;END{print join "*",@a}'

这里修改 如下测试:

> echo "bla [AK] bla [A_K] 10" | perl -lne 'push @a,/\[([^\]]*)\]/g;END{print join "*",@a}'
AK*A_K
于 2013-02-26T07:23:19.240 回答
1

尝试:

awk -F '[][]' '{print $2,$4}' OFS=\* file

好的,如果在一页中出现 0,1 或二维的单次出现,您可以尝试:

awk -F '[][]' '{if(NF==3)print $2; else if(NF>4)print $2,$4; else print 1}' OFS=\* file

或更难理解;):

awk -F '[][]' '{$0=NF==3?$2:NF>4?$2 OFS $4:1}1' OFS=\* file
于 2013-02-26T07:24:08.637 回答
1

您可以尝试以下方法:

echo "bla bla bla [AK] bla bla bla bla [A_K] bla bla bla" | sed 's/.*\[\(.*\)\].*\[\(.*\)\].*/\1*\2/g'

AK*A_K

于 2013-02-26T07:28:07.703 回答
0

使用 sed:

sed -n 's/[^]]*\[\([^]]*\)\]\s*\[\([^]]*\)\].*$/\1*\2/p' input
于 2013-02-26T07:26:55.417 回答