同时交换两个字符串

时间:2012-12-21 13:24:31

标签: regex sed

我怎样才能在sed中tr "ae" "ea"做什么?我不能使用this question中的临时字符串,因为我不知道保证不会出现在文本中的字符串。

也许我可以先用反斜杠等来逃避所有'a','e'和'\'......还是有更简单的方法?

感谢。

2 个答案:

答案 0 :(得分:3)

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

sed 's/@/@A/g; s/foo/@B/g; s/bar/foo/g; s/@B/bar/g; s/@A/@/g' file

上面将所有“@”字符转换为字符串“@A”,然后通过首先将“foo”转换为“@Bs”来交换foo和bar。此时你可以保证你的文本中没有“@Bs”,因为每个原始的“@”现在都有一个“A”,因为它在第一个s //的礼貌之后。其余的应该是显而易见的。

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

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

显然,您需要确保您在中间使用的任何命令都不会生成“@A”(或您选择的任何替换字符串)作为其输出的一部分!

答案 1 :(得分:1)

您可以使用transform (y) command;

sed 'y/ae/ea/'
  

&GT; echo aerodame | sed'y / ae / ea /'
  earodema