如果字符串前面有逗号,则插入一行新行Unix

时间:2018-01-16 05:29:10

标签: unix awk sed

我在文件中有以下格式的数据。

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

感谢任何帮助。

问候。

3 个答案:

答案 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)

  1. 使用awkgsub()函数将,abc替换为,\nabc

    $ awk '{gsub(/,abc/,",\nabc")}1' infile
    
  2. 使用 GNU awk gensub()函数

    $ awk '{print gensub(/(,)(abc)/,"\\1\n\\2","")}' infile
    
  3. 测试结果:

    <强>输入:

    $ 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