0

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

也许我可以先用反斜杠等转义所有“a”、“e”和“\”……还是有更简单的方法?

谢谢。

4

2 回答 2

3

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

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'

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

于 2012-12-21T14:56:43.487 回答
1

您可以使用变换(y)命令

sed 'y/ae/ea/'

> 回声机场 | sed 'y/ae/ea/'
耳水肿

于 2012-12-21T13:48:51.853 回答