cap*_*cha 6 regex sed pattern-matching
我试了几个小时为这个问题找到一个纯粹的sed解决方案.显然,遗憾的是我没有成功.一个非常棘手的问题.
例子(来自awk问题):
aaa 111 aaa 222 aaa 333 bbb 444 bbb 555 ccc 666
aaa 111,222,333 bbb 444,555 ccc 666
APM00065101435 189 APM00065101435 190 APM00065101435 191 APM00065101435 390 190104555 00C7 190104555 00D1 190104555 00E1 190104555 0454 190104555 0462 APM00065101435 391 APM00065101435 392
APM00065101435 189,190,191,390 190104555 00C7,00D1,00E1,0454,0462 APM00065101435 391,392
我试过了什么?我的一些非工作示例:
sed -nr '1{h;b};H;x;/(\S+).*\n\1.*\'/M{x;b};s/.*\'//m;s/\n\S*\s*/,/g;s/,$//;p' file
sed -nr '1{h;b};H;x;h;s/(\S+).*\n(\S+).*\'/\1\n\2/m;/(\S+)\n\1\'/M{$!b;g;bk};g;s/\n.*\'//m;:k;s/^\S+\s//2mg;s/\n/,/g;p;x;s/.*\n//;h;$l' file2
sed -nr 'H;g;s/(\S+)\s.*/\1/gm;/(\S+)\n\1\'/M{$!b;g;bk};g;1d;s/\n.*\'//m;:k;s/\n\S+\s/,/2g;s/\n//;p;g;s/\n.*(\n.*)$/\1/;h' file2
感谢您阅读本文.
这可能适合你(GNU sed):
sed -r ':a;$!N;s/^(([^ ]+ ).*)\n\2/\1,/;ta;P;D' file
Run Code Online (Sandbox Code Playgroud)
或者如果您愿意:
sed -r ':a;$!N;s/^((\S+\s).*)\n\2/\1,/;ta;P;D' file
Run Code Online (Sandbox Code Playgroud)
这将在模式空间中读取2行,比较每行的开头,如果它们相同,则用逗号替换第一行匹配第一行的开头并重复.如果线条不匹配则打印出第一行.
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |