行から2番目の文字「.」を削除する方法
私が持っているのはこれです(しかし、出力から最初の「.」を削除します)。
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'コマンドの後には、次のフラグのうち0つ以上が続くことがあります。
G
Apply the replacement to _all_ matches to the REGEXP, not just the first.
数字
Only replace the NUMBERth match of the REGEXP.
答え2
.
以下は、ファイルの1行から2行目を削除するいくつかの方法です(ファイル内のすべての行に影響を与えます)。
sed
。あなたすでに持っているおそらく最良の方法は何ですか?しかし、他の方法は次のとおりです。sed 's/\([^.]*\.[^.]*\)\./\1 /' file
.
これは([^.]*
)ではなく最も長いセグメントを探し、(.
)\.
、次ではない()セグメント、そして.
最後に.
()を探します\.
。括弧はパターンをキャプチャするため、これと呼ぶことができます\1
。したがって、上記のコマンドは2番目のコマンドを削除し.
て空白に置き換えます。sed
GNU(Linuxのデフォルト)がある場合は、次のように単純化できます。sed -r 's/([^.]*\.[^.]*)\./\1 /' file
パール
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