仅当最后一个字符存在时,如何删除它?
输入:
OpenOffice.org/m openOffice.org/ozm 个人。 Pfg。 菲尔。 教授。 分别。 屋顶长度/米 罗恩海峡
期望的输出:
OpenOffice.org openOffice.org 珀斯 普夫格 菲尔 教授 响应 罗恩斯特尔 罗恩斯特
到目前为止,我只留下了点,但不幸的是最后一个 sed 命令也删除了字母g
:
$ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'
答案1
你只需要逃避你的命令中的点sed
,一切都会好起来的。像这样:
sed 's/\.$//'
因为在您不转义它的情况下,.$
它将匹配字符串末尾的任何字符。
您也可以将所有sed
++放入一个中:grep
cut
sed
sed 's=/[^/]*$==;s/\.$//' filename
答案2
删除一个字符仅当它存在时正是参数扩展的描述。
$ var=path.
$ echo "$var ${var%.}"
path. path
在这种情况下,点并不特殊(点在正则表达式中是特殊的)。
可以使用以下命令删除其他模式%/*
:
$ var=openOffice.org/ozm
$ echo "${var%/*}"
openOffice.org
要删除两者:
$ var=roonstr./ozm
$ var=${var%/*}
$ var=${var%.}
$ echo "$var"
roonstr
当然,要处理源文件,对文件使用 sed 会更快。
只记得引用点(按字面意思匹配,否则意味着:任何字符)。
$ sed 's,/.*,,;s,\.$,,' file
答案3
只需稍微更改您的正则表达式:即可转义.
并且您不需要grep
cat filename | cut -d"/" -f1 | sed 's/\.$//'