我的输入字符串有' 0'或者' 1'在特定的位置。 如果它是' 1',我想用' 0'替换它。同样,如果它' 0' 0将其替换为' 1'。
按照假设进行工作' x'永远不会发生,我的字符串只是一个字符,我可以用3个正则表达式来完成:
s/0/x/
s/1/0/
s/x/0/
但那太乱了。我想知道PCRE是否只有一个表达式可以做到这一点?
答案 0 :(得分:4)
字符串中存在其他x不是问题,因为您不需要它:
sed 'y/01/10/' input >output
或没有sed:
tr 01 10 <input >output
我将@Casimir et Hippolyte的评论作为社区Wiki发布,因为我认为这是最好的答案,甚至高于我自己发布的答案。
答案 1 :(得分:2)
您可以使用类似
的内容perl -pe 's/([01])/ 0+!$1 /ge' file
其中$1
是捕获的字符串,!
产生否定,0+
强制数字上下文。 /g
标志表示处理一行上的每个匹配,/e
导致替换表达式被评估为Perl代码。
答案 2 :(得分:2)
这是一个gnu-awk命令,在给定输入中翻转1到0和0到1:
awk -v RS='[01]' '{ORS = xor(RT, 1)} 1' <<< "abc1foo0bar"
abc0foo1bar
awk -v RS='[01]' '{ORS = xor(RT, 1)} 1' <<< "1"
0
awk -v RS='[01]' '{ORS = xor(RT, 1)} 1' <<< "0"
1
awk -v RS='[01]' '{ORS = xor(RT, 1)} 1' <<< "foo1"
foo0
awk -v RS='[01]' '{ORS = xor(RT, 1)} 1' <<< "0bar"
1bar
此awk命令使用自定义记录分隔符作为0或1并使用bitwise xor
operation on RT
variable。
答案 3 :(得分:1)
不确定你的用例是什么,但是使用sed呢?
echo 'ah1s' | sed 's/0/x/;s/1/0/;s/x/1/'
echo 'ah0s' | sed 's/0/x/;s/1/0/;s/x/1/'