【问题标题】:How to "flip-replace" strings in a file using shell scripting如何使用 shell 脚本“翻转替换”文件中的字符串
【发布时间】:2010-07-26 15:43:46
【问题描述】:

我面临以下问题。

假设我有一个文件,其中包含如下内容:

blah blah blah blah
more text
<tag1>something</tag1>
<tag2>something else</tag2>
blah blah meh whatever
foo bar

我想要做的是用tag2替换所有出现的tag1,用tag1替换所有出现的tag2。但是,我不知道该怎么做,因为如果我使用 sed 's/tag1/tag2/g'sed 's/tag2/tag1/g' 之类的东西,我最终会得到一个只有 tag1 的文件。

我需要的是“翻转”这两个标签。

提前致谢。

【问题讨论】:

    标签: bash string shell sed


    【解决方案1】:

    为第一次替换添加一个临时标签怎么样。像这样的:

    sed -e 's/tag1/temporarytag/g' -e 's/tag2/tag1/g' -e 's/temporarytag/tag2/g'
    

    【讨论】:

    • 这是迄今为止三个中最好的答案,因为它在一次调用 sed 时就完成了,并且是一个完整的答案。
    【解决方案2】:

    你能通过一些你知道文件中不存在的标签吗?即

    sed 's/tag1/tag99/g' 
    sed 's/tag2/tag1/g'
    sed 's/tag99/tag2/g'
    

    【讨论】:

    • 我想过这个,我想我会接受它,但是有没有更清洁的解决方案?
    • 而不是 tag99 使用 tag1tag1,这将确保您不会点击任何现有标签。
    【解决方案3】:

    将 tag1 替换为唯一的 (tag3),然后将 tag2 设置为 tag1,然后将 tag3 设置为 tag2。

    【讨论】:

      【解决方案4】:
      $ sed 's/tag1/tmp/g;s/tag2/tag1/g;s/tmp/tag2/g' file
      

      【讨论】:

        猜你喜欢
        • 2017-11-17
        • 2014-11-24
        • 1970-01-01
        • 2013-11-18
        • 2012-11-02
        • 2021-02-03
        • 2016-11-04
        • 2016-09-03
        • 2018-07-08
        相关资源
        最近更新 更多