我正在尝试使用sed / awk命令来解析我的文本文件。 我想在同一行中的两个模式之间打印文本,并在其中添加一些字符。 例如: 如果我的行是
uint8_t aucRepresentationName[NR_UNIT_REPRESENTATIONS][CHARS_P_REPRESENTATION];
OR
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'
它并不总是两个d维数组,它可能是无或单/双维数组,我需要首先有多少[]的实例,如果它的0然后写1,如果它的单个数据然后是前A [ SIZE]然后写SIZE它的两个diamensional数组ex:A [RAW] [COL]写RAW * COL ..
我想知道我的命令有什么问题?或任何其他选择,因为它将帮助我进一步研究sed。
Amruta
答案 0 :(得分:1)
使用它:
perl -lne 'push @a,/\[([^\]]*)\]/g;END{print join "*",@a}'
从here修改 测试如下:
> echo "bla [AK] bla [A_K] 10" | perl -lne 'push @a,/\[([^\]]*)\]/g;END{print join "*",@a}'
AK*A_K
答案 1 :(得分: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
答案 2 :(得分:1)
您可以尝试以下操作:
echo "bla bla bla [AK] bla bla bla bla [A_K] bla bla bla" | sed 's/.*\[\(.*\)\].*\[\(.*\)\].*/\1*\2/g'
AK * A_K
答案 3 :(得分:0)
使用sed:
sed -n 's/[^]]*\[\([^]]*\)\]\s*\[\([^]]*\)\].*$/\1*\2/p' input