我的问题是仅在 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
在 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 都没有出现在同一行。
sed -n "N
$ {
s/HORIZONTAL\(.*\)VERTICAL/VERTICAL\1HORIZONTAL/
t print
s/VERTICAL\(.*\)HORIZONTAL/HORIZONTAL\1VERTICAL/
: 打印 p }" 你的文件
您需要首先在 sed 中加载所有行。
它适用于您的示例,如果有图案边框,则必须修改代码以限制图案边缘之间
我没有证据,但我担心这是不可能的sed
(如果“命令”是指 sed 命令,如,s
等)。不过,在 Perl 中使用一个命令是可能的:i
b
perl -pe 's/(HORIZONTAL)|(VERTICAL)/$1 ? VERTICAL : HORIZONTAL/e'
sed -e 's/day/temp/g' -e 's/night/day/g' -e 's/temp/night/g' infile
我不知道 sed 是否可以一次完成多个替换。上面的解决方案将每次出现的白天设置为温度,然后在另一次从夜间到白天,最后在最后一次将温度设置为夜间。
sed -e 's/HORIZONTAL/TMP/g;s/VERTICAL/HORIZONTAL/g;s/TMP/VERTICAL/g'