我需要sed删除行的第一个和最后一个字符作为源实例
(192.168.3.0)
结果
192.168.3.0
尝试这种方式:
sed 's/^.\(.*\).$/\1/'
但是它也删除了0个字符
如何避免这种行为?
使用tr更简单一些:
tr -d '()'
tr通常从一组字符转换为另一个字符,但是-d标志改变了行为以删除指定的字符,这在你的例子中非常方便。
使用sed的等价物将是:
sed -e 's/[()]//g'
这个怎么样:
$ echo "(192.168.3.0)" | sed 's/^.//;s/.$//' 192.168.3.0
虽然你的命令也在工作:
$ echo "(192.168.3.0)" | sed 's/^.\(.*\).$/\1/' 192.168.3.0
提供的答案是正确的。 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。