我无法获得与下面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让您完成一些教程。
假设您使用的是vi
或vim
,那么在[ .. ]
分组中包含选项卡字符所需要做的就是键入选项卡键。(我一直在使用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中只包含空格的字符串。也许您正在寻找([ ]*
来移除内部的前导空格,[ ]*)
来移除尾部空格。