我的问题是只在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
答案 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
无效(如果用“命令”表示s
,i
,{{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'