Regex 同时交换两个字符串

Regex 同时交换两个字符串,regex,sed,Regex,Sed,我在sed中如何做tr“ae”ea“所做的事情?我不能使用中这样的临时字符串,因为我不知道一个保证不会出现在文本中的字符串 也许我可以先用反斜杠把所有的“a”、“e”和“\”都去掉,等等。。。还是有更简单的方法 谢谢。您可以使用 >echo机场名称| sed“y/ae/ea/” 耳垢 你可以使用 >echo机场名称| sed“y/ae/ea/” 耳垢 你得到了答案,但写出了你的陈述:“我不能使用这个问题中的临时字符串,因为我不知道一个保证不会出现在文本中的字符串。”你可以创建这样的字符串: se

我在sed中如何做
tr“ae”ea“
所做的事情?我不能使用中这样的临时字符串,因为我不知道一个保证不会出现在文本中的字符串

也许我可以先用反斜杠把所有的“a”、“e”和“\”都去掉,等等。。。还是有更简单的方法

谢谢。

您可以使用

>echo机场名称| sed“y/ae/ea/”
耳垢

你可以使用

>echo机场名称| sed“y/ae/ea/”
耳垢


你得到了答案,但写出了你的陈述:“我不能使用这个问题中的临时字符串,因为我不知道一个保证不会出现在文本中的字符串。”你可以创建这样的字符串:

sed 's/@/@A/g; s/foo/@B/g; s/bar/foo/g; s/@B/bar/g; s/@A/@/g' file
上述方法将所有“@”字符转换为字符串“@A”,然后通过首先将“foo”s转换为“@Bs”来交换foo和bar。在这一点上,您可以保证文本中没有“@Bs”,因为每个原始“@”后面都有一个“A”,这是由第一个s//提供的。剩下的应该是显而易见的

当您需要使用其他命令对文件执行其他操作,并且需要一些保证不在输入中的字符串时,这是一种非常有用的技术:

sed 's/@/@A/g' file | <commands using @B, @C, etc.> | sed 's/@A/@/g'
sed's/@/@A/g'文件| | sed's/@A/@/g'

显然,你需要确保在中间使用的任何命令都不会生成“@ A”s(或者你选择的任何替换字符串)作为输出的一部分。p> 你得到了答案,但写下了你的陈述:“我不能使用这个问题中的临时字符串,因为我不知道一个保证不会出现在文本中的字符串。”你可以创建这样的字符串:

sed 's/@/@A/g; s/foo/@B/g; s/bar/foo/g; s/@B/bar/g; s/@A/@/g' file
上述方法将所有“@”字符转换为字符串“@A”,然后通过首先将“foo”s转换为“@Bs”来交换foo和bar。在这一点上,您可以保证文本中没有“@Bs”,因为每个原始“@”后面都有一个“A”,这是由第一个s//提供的。剩下的应该是显而易见的

当您需要使用其他命令对文件执行其他操作,并且需要一些保证不在输入中的字符串时,这是一种非常有用的技术:

sed 's/@/@A/g' file | <commands using @B, @C, etc.> | sed 's/@A/@/g'
sed's/@/@A/g'文件| | sed's/@A/@/g'

显然,你需要确保在中间使用的任何命令都不会生成“@ A”s(或者你选择的任何替换字符串)作为输出的一部分。p> 我很想知道为什么我被否决了这个答案。当然对我来说这听起来更简单…?[晚]可能是因为y/必须是静态宽度,并且会抱怨它,然而,默认情况下,tr虽然也使用静态宽度,但不会抱怨它,因此如果互换使用,可能会导致微妙的错误。我想知道为什么我对这个答案投了反对票。当然对我来说这听起来更简单…?[late]可能是因为y/必须是静态宽度,并且会抱怨它,但是,默认情况下,tr虽然也使用静态宽度,但不会抱怨它,因此如果互换使用,可能会导致细微的错误