如何删除第二个字符“.”从线
我所拥有的是这个(但它从输出中删除了第一个“.”
uname -r | sed s'/\./ /'
2 6.18-164.2.1.el5PAE
虽然我需要以下输出
2.6 18-164.2.1.el5PAE
答案1
只需将 N 添加到命令末尾即可匹配第 N 个匹配项,如下所示:
uname -r | sed 's/\./ /2'
你需要它做什么?
从info
页面sed
:
`s' 命令后面可以跟零个或多个以下标志:
G
Apply the replacement to _all_ matches to the REGEXP, not just the first.
数字
Only replace the NUMBERth match of the REGEXP.
答案2
.
以下是从文件的一行中删除第二行的几种方法(它们会影响文件的所有行):
sed
。你已经有什么可能是最好的方法,但这是另一种方法:sed 's/\([^.]*\.[^.]*\)\./\1 /' file
这将查找最长的非
.
([^.]*
) 段,然后是.
(\.
),然后是下一段非 ( ).
,最后是.
(\.
)。括号捕获了模式,因此我们可以将其称为\1
。因此,上面的命令只会删除第二个.
并用空格替换。如果您有 GNU
sed
(Linux 上默认),您可以简化为:sed -r 's/([^.]*\.[^.]*)\./\1 /' file
Perl
perl -pe 's/([^.]*\.[^.]*)\./\1 /' file
或者
perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file
awk
(我确信有更好的方法)awk -F. '{printf "%s.%s ",$1,$2; for(i=3;i<NF;i++){printf "%s.",$(i); }print $NF}' file