我在文件中有以下格式的数据。
abc : 123456 ,abc : 98766543,xyz : ABC DEF IJK,OPR : No
abc : 456363738,xyz :MNORET ,OPR : YES
abc : 66898965 ,abc : ABC9543,xyz : qwert,OPR : Yes
如果abc:前面有逗号,则插入一个新行。因此输出以下面的格式显示。
abc : 123456 ,
abc : 98766543,xyz : ABC DEF IJK,OPR : No
abc : 456363738,xyz :MNORET ,OPR : YES
abc : 66898965 ,
abc : ABC9543,xyz : qwert,OPR : Yes
我尝试使用sed替换它,但它无法正常工作。
sed -e 's/,abc ://\n abc :/g' 1.txt
感谢任何帮助。
问候。
答案 0 :(得分:1)
使用GNU sed:
sed -E 's/(,)(abc :)/\1\n\2/g' file
输出:
abc : 123456 , abc : 98766543,xyz : ABC DEF IJK,OPR : No abc : 456363738,xyz :MNORET ,OPR : YES abc : 66898965 , abc : ABC9543,xyz : qwert,OPR : Yes
答案 1 :(得分:1)
关注awk
解决方案也可能对您有帮助。
awk '{sub(/,abc :/,",\n&");sub(",\n,",",\n")} 1' Input_file
输出如下。
abc : 123456 ,
abc : 98766543,xyz : ABC DEF IJK,OPR : No
abc : 456363738,xyz :MNORET ,OPR : YES
abc : 66898965 ,
abc : ABC9543,xyz : qwert,OPR : Yes
答案 2 :(得分:0)
使用awk
,gsub()
函数将,abc
替换为,\nabc
$ awk '{gsub(/,abc/,",\nabc")}1' infile
使用 GNU awk gensub()
函数
$ awk '{print gensub(/(,)(abc)/,"\\1\n\\2","")}' infile
测试结果:
<强>输入:强>
$ cat infile
abc : 123456 ,abc : 98766543,xyz : ABC DEF IJK,OPR : No
abc : 456363738,xyz :MNORET ,OPR : YES
abc : 66898965 ,abc : ABC9543,xyz : qwert,OPR : Yes
使用awk
$ awk '{gsub(/,abc/,",\nabc")}1' infile
abc : 123456 ,
abc : 98766543,xyz : ABC DEF IJK,OPR : No
abc : 456363738,xyz :MNORET ,OPR : YES
abc : 66898965 ,
abc : ABC9543,xyz : qwert,OPR : Yes
使用GNU awk
$ awk '{print gensub(/(,)(abc)/,"\\1\n\\2","")}' infile
abc : 123456 ,
abc : 98766543,xyz : ABC DEF IJK,OPR : No
abc : 456363738,xyz :MNORET ,OPR : YES
abc : 66898965 ,
abc : ABC9543,xyz : qwert,OPR : Yes