Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用sed删除字符串中第二个句点之后的内容_Sed - Fatal编程技术网

如何使用sed删除字符串中第二个句点之后的内容

如何使用sed删除字符串中第二个句点之后的内容,sed,Sed,在我的脚本中,有一个可能的版本号:15.03.2设置为variable$STRING。这些数字总是在变化。我想把它简化为:15.03(或者下次的任何内容) 如何使用sed删除第二次之后的所有内容 比如: $(echo“$STRING”| sed“s/\.^$\./” (我不知道^,$和其他人做了什么,但它们看起来是相关的,所以我只是猜测。) 一般来说,要跳过N个时段: $ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){2}[^.]*)\..*/\1/'

在我的脚本中,有一个可能的版本号:
15.03.2
设置为variable
$STRING
。这些数字总是在变化。我想把它简化为:
15.03
(或者下次的任何内容)

如何使用
sed
删除第二次
之后的所有内容

比如:

$(echo“$STRING”| sed“s/\.^$\./”

(我不知道
^
$
和其他人做了什么,但它们看起来是相关的,所以我只是猜测。)

一般来说,要跳过N个时段:

$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){2}[^.]*)\..*/\1/'
15.03.2
$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){3}[^.]*)\..*/\1/'
15.03.2.3
$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){4}[^.]*)\..*/\1/'
15.03.2.3.4
一般来说,要跳过N个时段:

$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){2}[^.]*)\..*/\1/'
15.03.2
$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){3}[^.]*)\..*/\1/'
15.03.2.3
$ echo '15.03.2.3.4.5' | sed -E 's/(([^.]*\.){4}[^.]*)\..*/\1/'
15.03.2.3.4

我认为这里更好的工具是切割

echo '15.03.2' | cut -d . -f -2

我认为这里更好的工具是切割

echo '15.03.2' | cut -d . -f -2
这可能适用于您(GNU-sed):

删除第二次或多次出现的句点,后跟零或非句点字符。

这可能适用于您(GNU-sed):


删除第二次或多次出现的句点,后跟零或非句点字符。

^是输入/行的开头,$是结尾。好的,Cyrus,谢谢。^是输入/行的开始,$是输入/行的结束。好的,赛勒斯,谢谢。是的,它是…:-)。是的,一个更好的工具,谢谢。但是,我的问题是关于sed的,只是说。是的,它是…:-)。是的,一个更好的工具,谢谢。但是,我的问题是关于sed的,只是说。谢谢你,它很有用,你会被记住。谢谢你,它很有用,你会被记住。@EdMorton请参阅替换命令中的标志
number
g
为什么像对GNU sed一样起作用的详细信息。我非常熟悉这些标志,我只是不明白为什么在给定regexp的情况下,这种特殊的组合是必要的。例如,给定
a.b.c.d
的输入和regexp
\.[^。]*
第二个
介于
b
c
之间,因此
2
应该匹配最左边最长的匹配子字符串,即
.c.d
,那么为什么在它之后还需要一个
g
?@EdMorton使用您的示例,第二个匹配
。c
然后
g
标志匹配以下任何一个这样的正则表达式,在您的例子中也是
.d
。因此,
number
g
标志的组合从数字到字符串的末尾都匹配。啊,对了,我对
[^.]*
匹配的内容感到困惑,谢谢。@EdMorton请参阅,以了解为什么替换命令中的标志
number
g
与GNU-sed的作用相同。我对这些标志非常熟悉,但我不明白为什么在给定regexp的情况下需要这种特殊的组合。例如,给定
a.b.c.d
的输入和regexp
\.[^。]*
第二个
介于
b
c
之间,因此
2
应该匹配最左边最长的匹配子字符串,即
.c.d
,那么为什么在它之后还需要一个
g
?@EdMorton使用您的示例,第二个匹配
。c
然后
g
标志匹配以下任何一个这样的正则表达式,在您的例子中也是
.d
。因此,
number
g
标志的组合从数字到字符串的末尾都匹配。啊,对了,我对
[^.]*
将匹配什么感到困惑,谢谢。