sed命令-分支到标签



我无法获得与下面SED教程中给出的分支示例相同的输出,http://www.grymoire.com/Unix/Sed.html#uh-59

此处引用代码:

#!/bin/sh
sed '
:again
s/([ ^I]*)//
t again
'

空格仍在此筛选器后面的括号中。

[更新]这是我的输出:

$echo "( ( test ) )" | sed '
> :again
>      s/([ ]*)//
>      t again
> '
( ( test ) )
$

那不应该是((test))吗?如何让脚本删除作者演示的嵌套括号中的空格?

[/UPDATE]

[更新2]

$echo " ( ( ) ) " | sed '
> :again
> s/([ ]*)//
> t again
> '

提示未返回。

[/UPDATE2]

此外,如何输入"^I"字符?我认为这是水平选项卡,但我不能像其他控制字符一样通过puTTY键入(例如,要获得"Enter",我键入"Ctrl-V",然后键入"Enter"键,但这不适用于选项卡)。我只尝试了使用空格(使用正则表达式[ ]*而不是[ ^I]*),但也失败了。

Bully让您完成一些教程。

假设您使用的是vivim,那么在[ .. ]分组中包含选项卡字符所需要做的就是键入选项卡键。(我一直在使用putty,如果按tab char没有将tab char"插入"到文档/命令行中,那么您就有了putty配置问题)。

^I来自vilist模式。List模式可以方便地查看换行字符(\n)将显示为reg exp字符$(在reg ex中是"行尾锚",另一个是^字符(行尾))的位置。

因此,打开vi列表模式,使用:li,您将看到所有选项卡字符都扩展为^I,所有行的末尾都是$

正如你所说的

如何让脚本删除嵌套括号中的空格,如所示

这有点模糊,因为较新的sed使用纯parens作为分组字符,为s/pat/repl/except cmd的替换端创建类似1的替换组。

假设您的示例在替换端没有编号的替换值,我假设其目的是删除一个字面()对AND,它应该按指示工作。一旦:set list,在[ ... ]中添加一个选项卡字符,它就应该可以工作了。如果没有,请编辑您的问题以及可能出现的任何错误消息。

我希望这能有所帮助。

( test )与正则表达式([ ]*)不匹配。([ ]*)只匹配在paren中只包含空格的字符串。也许您正在寻找([ ]*来移除内部的前导空格,[ ]*)来移除尾部空格。

最新更新