我正在尝试编写sed命令来反转字符串。如果我输入“美国”作为输入,输出应该是“酸化”。
请帮帮忙。
FYI:我可以使用shell脚本Python脚本来完成这个任务。但我不能用SED来做。
发布于 2018-01-14 02:56:18
在GNU手册中有一个这样的例子
rev.sed
/../! b
# Reverse a line. Begin embedding the line between two newlines
s/^.*$/\
&\
/
# Move first character at the end. The regexp matches until
# there are zero or one characters between the markers
tx
:x
s/\(\n.\)\(.*\)\(.\n\)/\3\2\1/
tx
# Remove the newline markers
s/\n//g像这样运行:
echo america | sed -f rev.sed输出:
acirema基本上思路是用新行标记字符串的开始和结束,然后,当新行通过字符串移动时,交换相邻的字符。
发布于 2018-01-14 03:11:46
除了GNU手册中的版本之外,如果您不介意分两个阶段这样做的话,您可以在非GNU中这样做。
$ echo Canada | sed $'s/./&\\\n/g' | sed -ne $'x;H;${x;s/\\n//g;p;}'
adanaC这使用格式替换在脚本中包括换行符。它的工作方式是首先将输入字符串分隔为每一个字符的一行,然后将字符插入到hold缓冲区的开头。
什么?插入字符?
当然..。x交换保持空间和模式空间,abd H将(当前)模式空间附加到保持空间。因此,对于每个字符,我们将该字符放置在保持空间中,然后将旧的保持空间附加到其中,从而逆转输入。
最后一个命令删除换行符,以便重建原始字符串。
这应该适用于任何单个字符串,但它将将多行输入连接到单个输出字符串中。
发布于 2018-01-14 13:28:04
这可能对您有用(GNU sed):
sed -r 'G;:a;s/^(.)(.*\n)/\2\1/;ta;s/\n//' file使用默认保持缓冲区追加换行符。在换行符后面追加/插入第一个非换行符。重复直到失败,然后删除(引导)换行符。
https://stackoverflow.com/questions/48246212
复制相似问题