【发布时间】:2017-04-19 23:13:19
【问题描述】:
示例输入是:
3 TT 00670101J12SEP1629OCT16 6 OTP08100810+0300 DXB14351435+04001 73WCDIOYBMUKRHGLQNTVSEX XX M 00468673
"7518,32S,CDIYBMULKRQHTVNSE," | sed "s/$,\{9\}\(.\{3\}\).*/\1,&/"
需要的样本输出是
7518,32S,CDIYBMULKRQHTVNSE,C
如果 170 以后的字符不存在..
7518 是行号。它已经开发了,但我正在研究一个额外的要求,即如果存在 170 以后的字符,则在逗号之后添加到行尾,否则从前一个标记中获取第一个字符。
【问题讨论】:
-
$是一个元字符,表示模式空间的结束,如果它是模式中的最后一个字符。在其他任何地方,它都是文字$。在某些版本的 sed 中,当模式的最后一部分合乎逻辑时,它也将是模式空间的结尾,即:abc\($\|def\) -
真正的查询是这样的: sed '/./=' MYTXTFILE.txt | sed '/./N; s/\n/ /' | sed -ne 's/ 3\s.\{70\}(.\{3\})(.\{25\}).\{72\}(.\{15\}).*/\, \ \1,\2,\3 /p'|sed -e 's/\s//g' -e 's/VV/,V/g' 我想改变这个,如果我们没有第四个标记和第三个标记以逗号结尾,我应该从 MYTXTFILE.txt 中提取一个子字符串,比如从文件的第 5 到第 10 列索引并将其放在最后。
-
以下工作正常,除了我用“test”替换结尾: sed '/./=' RO.txt | sed '/./N; s/\n/ /' | sed -ne 's/ 3\s.\{70\}(.\{3\})(.\{25\}).\{72\}(.\{15\}).*/\, \ \1,\2,\3 /p'|sed -e 's/\s//g' -e 's/VV/,V/g' -e 's/,$/,test/g'但是,如果我用 MYTXTFILE.txt 的第 5 个索引到第 10 个索引的子字符串替换 test,这不起作用..
-
您能否使用
RO.txt的内容和您的预期输出来编辑您的问题?