Sed交换模式

时间:2013-07-11 12:49:34

标签: sed swap

我的问题是只在one1 sed命令中反转2个模式。 我们考虑一下这个文本文件:

LAYER M1
DIRECTION HORIZONTAL
END M1
LAYER M2
DIRECTION VERTICAL
END M2

所以我想在一遍中反转HORIZONTAL / VERTICAL字模式,如下所示:

LAYER M1
DIRECTION VERTICAL
END M1
LAYER M2
DIRECTION HORIZONTAL
END M2

5 个答案:

答案 0 :(得分:2)

在unix.stackexchange上有一个解决方案 - https://unix.stackexchange.com/questions/21061/cleanly-swap-all-occurences-of-two-strings-using-sed

在这里应用它将是:

sed 's/HORIZONTAL/VERTICAL/g; t; s/VERTICAL/HORIZONTAL/g' file

取决于VERTICAL和HORIZONTAL不出现在同一行。

答案 1 :(得分:1)

我没有证据,但我担心sed无效(如果用“命令”表示si,{{1}等sed命令等)。但是在Perl中可以使用一个命令:

b

答案 2 :(得分:1)

sed -e 's/day/temp/g' -e 's/night/day/g' -e 's/temp/night/g' infile

我不知道sed是否可以在一次传递中进行多次替换。上面的解决方案将每天的每一个事件设置为temp,然后在另一个传递中将其设置为白天,最后在最后一次传递到temp。

答案 3 :(得分:1)

sed -n "N
   $ {
     s/HORIZONTAL\(.*\)VERTICAL/VERTICAL\1HORIZONTAL/
     t print
     s/VERTICAL\(.*\)HORIZONTAL/HORIZONTAL\1VERTICAL/

:打印          p          }“你的文件”

您需要先在sed中加载所有行。

它适用于您的样本,如果有图案边框,则必须修改代码以限制图案边缘

答案 4 :(得分:0)

sed -e 's/HORIZONTAL/TMP/g;s/VERTICAL/HORIZONTAL/g;s/TMP/VERTICAL/g'