【问题标题】:How to remove a space between matching words?如何删除匹配单词之间的空格?
【发布时间】:2016-06-08 08:18:51
【问题描述】:

我已经阅读了很多关于如何替换文件中的空格的问题,但我遇到了以下问题:

我有一个这样的文件:

<foo>"crazy foo"</foo> <bar>dull-bar</bar>

我正在尝试删除 &gt; &lt; 之间的空格,并且只删除那些空格,这样文件就会像:

`<foo>"crazy foo"</foo><bar>dull-bar</bar>`

到目前为止,我已经尝试使用 sedtr 删除 then。 Sed 无法正常工作并使用tr '&gt; &lt;' '&gt;&lt;' 输出:

<foo>"crazy foo"</foo><<bar>dull-bar</bar>

【问题讨论】:

  • 你试过echo '&lt;foo&gt;"crazy foo"&lt;/foo&gt; &lt;bar&gt;dull-bar&lt;/bar&gt;' | sed 's/&gt; &lt;/&gt;&lt;/g'

标签: regex linux bash replace sed


【解决方案1】:
sed -i -e "s/> *</></g" YourFile

-i 表示 YourFile 已修改。删除此选项以测试您的命令并在 shell 输出中显示结果。

* 匹配 n 空格。

sed 表达式末尾的g 表示“替换所有出现的位置”。

【讨论】:

    【解决方案2】:

    你可以试试这样的

    echo "<foo>"crazy foo"</foo> <bar>dull-bar</bar>" | sed 's/>[[:space:]]*</></g '
    

    【讨论】:

      【解决方案3】:
      awk -F"\"" '{print $3}' file.txt | sed 's/ //g'
      

      【讨论】: