GNU/Linux >> Linux の 問題 >  >> Ubuntu

プレフィックスで始まるファイル内のすべての文字列を置き換える方法は?

例:

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

Ubuntu
  1. Ubuntuにdebファイルをインストールする方法(例付き)

  2. ファイル内の文字列を置き換える方法は?

  3. すべてのカーネル リリースと互換性があるように Linux カーネル モジュールをビルドするにはどうすればよいですか?

  1. 改行をNulに置き換えますか?

  2. 「?」で始まる行を無視してファイルを出力する方法は?

  3. GrubをBurgに置き換える方法は?

  1. Wine内のすべてのファイルタイプを対応するネイティブアプリケーションに関連付ける方法は?

  2. 男と.8ファイルを開く方法は?

  3. Ubuntu 16.04でIptablesをFirewalldに置き換える方法は?