我需要 sed 删除行的第一个和最后一个字符,例如源
(192.168.3.0)
结果
192.168.3.0
尝试这种方式:
sed 's/^.\(.*\).$/\1/'
但随后它也会删除 0 个字符
如何避免这种行为?
答案1
正如其他人指出的那样,您使用的 sed 模式不正确,可以进行修复以正确删除第一个和最后一个字符。
或者,在您的特定示例中,如果您真正想要做的只是删除括号(仅留下 IP 地址),那么一种更简单的方法就可以完成这项工作。
例如,这tr
会从输入中过滤掉所有括号:
tr -d '()'
这相当于以下内容sed
:
sed -e 's/[()]//g'
如果您真的想知道如何删除第一个和最后一个字符,请查看其他答案。
答案2
这个怎么样:
$ echo "(192.168.3.0)" | sed 's/^.//;s/.$//'
192.168.3.0
尽管您的命令也有效:
$ echo "(192.168.3.0)" | sed 's/^.\(.*\).$/\1/'
192.168.3.0
答案3
提供的答案是正确的。janos 的答案更适合您的情况,但并不具有普遍性。为了跟进 Sethos II 的回复,提供几种方法:
$ echo "(192.168.3.0)" | sed -E 's/(^.)|(.$)//g'
192.168.3.0
$ echo "(192.168.3.0)" | sed 's/\(^.\)\|\(.$\)//g'
192.168.3.0
所有四个均有效。TMTOWTDI。