删除每行的第一个和最后一个字符/sed

删除每行的第一个和最后一个字符/sed

我需要 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。

相关内容