例:
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:グローバルに置換を実行することを表明します。つまり、行内のパターンの各出現を置換します。