在用模式开始的行的模式之后,shell删除空格

时间:2018-03-14 00:47:28

标签: shell sed

输入:

<measType p="1">pmCabinetFanSpeed</measType>
<measType p="2">pmCabinetFanSpeedExternal</measType>
<measType p="3">pmCabinetTemperature</measType>
<measType p="4">pmSpmBarometricAirPressure</measType>
<r p="1">           61          </r>
<r p="2">             </r>
<r p="3">, , , , ,</r>
<r p="4">1314    1537</r>

预期产出:

<measType p="1">pmCabinetFanSpeed</measType>
<measType p="2">pmCabinetFanSpeedExternal</measType>
<measType p="3">pmCabinetTemperature</measType>
<measType p="4">pmSpmBarometricAirPressure</measType>
<r p="1">61</r>
<r p="2"></r>
<r p="3">,,,,,</r>
<r p="4">13141537</r>

基本上,删除&gt;之后的所有空白区域。该行以<r>

开头

有什么想法吗?

我已尝试sed -E 's/(<r p=[0-9]+>) /\1/g',但它不会保留逗号。

1 个答案:

答案 0 :(得分:0)

关注awk可能对您有帮助。

awk '{match($0,/>.*</);val=substr($0,RSTART,RLENGTH);gsub(/ /,"",val);print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH+1)}'  Input_file

现在也添加非单线形式的解决方案。

awk '
{
  match($0,/>.*</);
  val=substr($0,RSTART,RLENGTH);
  gsub(/ /,"",val);
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH+1)
}
'   Input_file

如果您想将输出保存到相同的Input_file中,请在上面的代码中添加以下内容。

> temp_file && mv Input_file temp_file将输出保存到Input_file本身。