例:
1:20 2:25 3:0.432 2:-17 10:12
始まるすべての文字列を置き換えたい 2:
を使用 2:0
へ 。
出力:
1:20 2:0 3:0.432 2:0 10:12
承認された回答:
sed
を使用する :
sed -E 's/((^| )2:)[^ ]*/\10/g' in > out
また、souravcの回答に触発されたように、ない 2:
のチャンス 文字列の開始後の部分文字列ではない 先頭の2:
を含む サブストリング(例:ない 1:202:25
のチャンス 文字列。次の短縮コマンドで1:202:0
に置き換えられます。 )、コマンドは次のように短縮される場合があります:
sed -E 's/2:[^ ]*/2:0/g' in > out
コマンド#1 /#2の内訳 :
-
-E
:sed
にします パターンをERE(拡張正規表現)パターンとして解釈します; -
> out
:stdout
をリダイレクトしますout
へ;
sed
コマンド#1の内訳 :
-
s
:置換を実行することを表明します -
/
:パターンを開始します -
(
:キャプチャグループを開始します -
(
:許可された文字列のグループ化を開始します -
^
:行の先頭に一致します -
|
:2番目に許可された文字列を区切ります -
に一致します キャラクター
-
)
:許可された文字列のグループ化を停止します -
2
:2
に一致します キャラクター -
:コード> :
に一致:
キャラクター -
)
:キャプチャグループを停止します -
[^] *
:以外の任意の数の文字に一致します
-
/
:パターンを停止/置換文字列を開始 -
\ 1
:後方参照が最初のキャプチャグループに置き換えられました -
を追加します キャラクター
-
/
:置換文字列を停止/パターンフラグを開始 -
g
:グローバルに置換を実行することを表明します。つまり、行内のパターンの各出現を置換します。
sed
コマンド#2の内訳 :
-
s
:置換を実行することを表明します -
/
:パターンを開始します -
2
:2
に一致します キャラクター -
:コード> :
に一致:
キャラクター -
[^] *
:以外の任意の数の文字に一致します
-
/
:パターンを停止/置換文字列を開始 -
2:0
:2:0
を追加します 文字列 -
/
:置換文字列を停止/パターンフラグを開始 -
g
:グローバルに置換を実行することを表明します。つまり、行内のパターンの各出現を置換します。