sed +如何删除每个数字开始或结束的字符

sed +如何删除每个数字开始或结束的字符

如何删除.每个数字开头或结尾的字符?

备注 –perl一个衬垫也是不错的替代品sed

输入示例:

 .23.12.44.5.
 .233.3.3.3
 23.4.5.3.2..
 ....33.2.3.45.5
 .3.3.2.....

预期输出:

 23.12.44.5
 233.3.3.3
 23.4.5.3.2
 33.2.3.45.5
 3.3.2

(请注意,行可能以空白(空格或制表符)结尾和/或开头,这些空白应被保留)。

答案1

使用标准语法(因为OP提到Solaris):

sed 's/^\([[:blank:]]*\)\.*/\1/;s/\.*\([[:blank:]]*\)$/\1/'

在 Solaris 上,像往常一样,您可能需要调用/usr/xpg4/bin/sedcommand -p sed

答案2

干得好:

sed -e 's/^\(\s*\)\.\+/\1/;s/\.\+\s*$//' your_file

这会将修改后的文件打印到标准输出。要写入另一个文件,请使用:

sed -e 's/^\(\s*\)\.\+/\1/;s/\.\+\s*$//' your_file >new_file

要就地修改文件,请使用

sed -i -e 's/^\(\s*\)\.\+/\1/;s/\.\+\s*$//' your_file

编辑

  • 修改了正则表达式以考虑(可能的)前导或尾随空格。
  • 根据 manatwork 的评论修改了正则表达式以保留前导空格。

答案3

$ cat foo
.23.12.44.5.
 .233.3.3.3
line1
 23.4.5.3.2..
 ....33.2.3.45.5
 .3.3.2.....

line2
$ sed 's/^ *\.*//;s/\.* *$//' foo
23.12.44.5
233.3.3.3
line1
23.4.5.3.2
33.2.3.45.5
3.3.2

line2

相关内容