2

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

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

所以我想像这样一次性反转水平/垂直单词模式:

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

5 回答 5

3

在 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 都没有出现在同一行。

于 2013-11-07T18:06:03.733 回答
1
sed -n "N
   $ {
     s/HORIZONTAL\(.*\)VERTICAL/VERTICAL\1HORIZONTAL/
     t print
     s/VERTICAL\(.*\)HORIZONTAL/HORIZONTAL\1VERTICAL/

: 打印 p }" 你的文件

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

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

于 2013-11-11T09:36:15.803 回答
1

我没有证据,但我担心这是不可能的sed(如果“命令”是指 sed 命令,如,s等)。不过,在 Perl 中使用一个命令是可能的:ib

perl -pe 's/(HORIZONTAL)|(VERTICAL)/$1 ? VERTICAL : HORIZONTAL/e'
于 2013-07-11T13:06:06.457 回答
1
sed -e 's/day/temp/g' -e 's/night/day/g' -e 's/temp/night/g' infile

我不知道 sed 是否可以一次完成多个替换。上面的解决方案将每次出现的白天设置为温度,然后在另一次从夜间到白天,最后在最后一次将温度设置为夜间。

于 2013-07-11T13:08:22.590 回答
0
sed -e 's/HORIZONTAL/TMP/g;s/VERTICAL/HORIZONTAL/g;s/TMP/VERTICAL/g'
于 2013-07-11T13:15:54.030 回答