【问题标题】:Reformat spaces around a particular character using tr / sed / awk使用 tr / sed / awk 重新格式化特定字符周围的空格
【发布时间】:2012-05-05 15:11:34
【问题描述】:

输入文件如下所示:

Header :  

            Data  
  Header2 :

data for header2

Header3 : data 3something

我做了什么:

sed "s/^ *//;s/ *$//;s/ \{1,\}/ /g" infile | tr -s "\n"  > outfile

现在是这样的:

Header :  
Data  
Header2 :  
data for header2  
Header3 : data 3something

我要找的是这个:

Header :  
Data  
Header2 :  
data for header2  
Header3 :  
data 3something  

那么,我在这里缺少什么?

【问题讨论】:

  • "Header3 : data 3something" 在原始文件的一行中。您的命令序列中没有任何内容可以将其分成两行。

标签: linux bash sed awk tr


【解决方案1】:

通过稍微修改你的一个班轮,我认为你可以让它工作:

sed "s/^ *//;s/ *$//;s/ \{1,\}/ /g;s/: */:\n/" infile | tr -s "\n"  > outfile

【讨论】:

    【解决方案2】:

    这可能对你有用:

    sed '/^$/d;s/^\s*//;/:\s*\(\S\+\)/s//:\n\1/' file
    Header :  
    Data  
    Header2 :
    data for header2
    Header3 :
    data 3something
    

    【讨论】:

      【解决方案3】:
      awk '$1 = $1 { if(NR!=8) print } END { print $1, $2 "\n" $3, $4 }' file 
      Header :
      Data
      Header2 :
      data for header2
      Header3 :
      data 3something
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        • 2017-02-12
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 2021-04-01
        相关资源
        最近更新 更多