如何删除.
每个数字开头或结尾的字符?
备注 –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/sed
或command -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