仅在有最后一个字符的情况下如何删除?
输入:
OpenOffice.org/m openOffice.org/ozm 人 Pfg。 菲尔 教授 分别 根/米 盎司/盎司
所需的输出:
OpenOffice.org openOffice.org 佩尔斯 聚乙二醇 菲尔 教授 回应 伦斯特 伦斯特
到目前为止,我只剩下了点,但不幸的是最后一个sed命令也删除了字母g
:
$ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'
仅在有最后一个字符的情况下如何删除?
输入:
OpenOffice.org/m openOffice.org/ozm 人 Pfg。 菲尔 教授 分别 根/米 盎司/盎司
所需的输出:
OpenOffice.org openOffice.org 佩尔斯 聚乙二醇 菲尔 教授 回应 伦斯特 伦斯特
到目前为止,我只剩下了点,但不幸的是最后一个sed命令也删除了字母g
:
$ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'
Answers:
您只需要在sed
命令中转义点,一切都会好起来的。像这样:
sed 's/\.$//'
因为在不逃脱的情况下,.$
它将匹配字符串末尾的任何字符。
您也可以将所有sed
+ grep
+ cut
放到一个中sed
:
sed 's=/[^/]*$==;s/\.$//' filename
sed -n '/\./{s=/[^/]*$==;s/\.$//;p}
。无论如何grep
+的sed
工作时间会超过一个sed
。
sed 's/[./]\+[^./]*$//'
仅在有字符扩展的情况下才删除该字符,确切描述了参数扩展。
$ 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