首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sed字符串反向

Sed字符串反向
EN

Stack Overflow用户
提问于 2018-01-14 02:39:08
回答 4查看 6.8K关注 0票数 1

我正在尝试编写sed命令来反转字符串。如果我输入“美国”作为输入,输出应该是“酸化”。

请帮帮忙。

FYI:我可以使用shell脚本Python脚本来完成这个任务。但我不能用SED来做。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-14 02:56:18

GNU手册中有一个这样的例子

rev.sed

代码语言:javascript
复制
/../! 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

像这样运行:

代码语言:javascript
复制
echo america | sed -f rev.sed

输出:

代码语言:javascript
复制
acirema

基本上思路是用新行标记字符串的开始和结束,然后,当新行通过字符串移动时,交换相邻的字符。

票数 7
EN

Stack Overflow用户

发布于 2018-01-14 03:11:46

除了GNU手册中的版本之外,如果您不介意分两个阶段这样做的话,您可以在非GNU中这样做。

代码语言:javascript
复制
$ echo Canada | sed $'s/./&\\\n/g' | sed -ne $'x;H;${x;s/\\n//g;p;}'
adanaC

这使用格式替换在脚本中包括换行符。它的工作方式是首先将输入字符串分隔为每一个字符的一行,然后将字符插入到hold缓冲区的开头。

什么?插入字符?

当然..。x交换保持空间和模式空间,abd H将(当前)模式空间附加到保持空间。因此,对于每个字符,我们将该字符放置在保持空间中,然后将旧的保持空间附加到其中,从而逆转输入。

最后一个命令删除换行符,以便重建原始字符串。

这应该适用于任何单个字符串,但它将将多行输入连接到单个输出字符串中。

票数 4
EN

Stack Overflow用户

发布于 2018-01-14 13:28:04

这可能对您有用(GNU sed):

代码语言:javascript
复制
sed -r 'G;:a;s/^(.)(.*\n)/\2\1/;ta;s/\n//' file

使用默认保持缓冲区追加换行符。在换行符后面追加/插入第一个非换行符。重复直到失败,然后删除(引导)换行符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48246212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档