如何使用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
标志的组合从数字到字符串的末尾都匹配。啊,对了,我对[^.]*
将匹配什么感到困惑,谢谢。