Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Sed字符串反转_Linux_Sed - Fatal编程技术网

Linux Sed字符串反转

Linux Sed字符串反转,linux,sed,Linux,Sed,我正在尝试编写sed命令来反转字符串。 如果我输入“america”作为输入,那么输出应该是“acirema” 请帮忙 供参考: 我可以使用shell脚本、Python脚本来实现这一点。但我无法使用SED完成此操作。中有一个例子: 修订版sed /../!B #倒转一条线。开始在两个换行符之间嵌入该行 s/^*$/\ &\ / #移动结尾处的第一个字符。regexp匹配到 #标记之间有零个或一个字符 德克萨斯州 :x s/\(\n.\)\(.\)\(.\n\)/\3\2\1/ 德克萨斯州 #删除

我正在尝试编写sed命令来反转字符串。 如果我输入“america”作为输入,那么输出应该是“acirema”

请帮忙

供参考:
我可以使用shell脚本、Python脚本来实现这一点。但我无法使用SED完成此操作。

中有一个例子:

修订版sed

/../!B
#倒转一条线。开始在两个换行符之间嵌入该行
s/^*$/\
&\
/
#移动结尾处的第一个字符。regexp匹配到
#标记之间有零个或一个字符
德克萨斯州
:x
s/\(\n.\)\(.\)\(.\n\)/\3\2\1/
德克萨斯州
#删除换行标记
s/\n//g
按如下方式运行:

echo america | sed -f rev.sed
输出:

acirema

基本上,这个想法是用新行标记字符串的开始和结束,然后,当新行在字符串中移动时,交换相邻的字符。

除了GNU-sed手册中的版本外,如果您不介意分两个阶段执行,您可以在非GNU-sed中执行此操作

$ echo Canada | sed $'s/./&\\\n/g' | sed -ne $'x;H;${x;s/\\n//g;p;}'
adanaC
这将使用格式替换在脚本中包含换行符。它的工作原理是首先将输入字符串按每个字符分隔成一行,然后将字符插入保持缓冲区的开头

什么?插入字符

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

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

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

这可能适用于您(GNU-sed):


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

使用了另一种不需要GNP的解决方案:

sed -e 's/^/\
/' -e ':a' -e 's/\n\(.*\)\(.\)/\2\
\1/
ta' -e 's/\n//'

我清楚提到的可能的副本。我可以使用shell脚本来完成它。我需要用SED来做。我的要求不重复。请不要降低点我已经经历过了。这是不同的,你应该删除问题,而不是编辑它说“请忽略”。啊,你发现了同样的问题。删除我的答案。
sed -e 's/^/\
/' -e ':a' -e 's/\n\(.*\)\(.\)/\2\
\1/
ta' -e 's/\n//'