sed コマンドは、すべての列の最初の行を確認して置き換えます。

sed コマンドは、すべての列の最初の行を確認して置き換えます。

ファイル.txt:

    if (early_timeout == TRUE) {
    sprintf(send_buff, "XYZ: Command timed out",
                    command_timeout);
    result = UNKNOWN;
    }

上記は、適切なインデントが適用されたファイルのサンプル内容です。を使用XYZして交換しようとするABCと少し難しいですsed

  1. Butを使用すると、sed -i '/^.*sprintf/ s/XYZ/ABC/g' file.txt(printf、asprintf)が単語で比較され、ファイル全体(sprintf、asprintfなど)で始まるすべての行が置き換えられますsprintf
  2. この場合、sed -i '/^.sprintf/ s/XYZ/ABC/g' file.txt行の最初の単語を比較するために使用されます(例:sprintf比較と置換)。ファイルに追加のインデントがあると失敗します。

どこからでも始まる単語を具体的に比較し、代替操作を実行するようにsedする方法はありますか?

sed -r 's/^[ \t]*//'私が見つけた1つの方法は、file.txtの内容をstd出力の左側にソートするために適用し、一度に結合してsed -i '/^.sprintf/ s/XYZ/ABC/g' file.txt実行する方法はありますか?それともこれを達成するための他の方法はありますか?これはうまく動作しないようで、私は少し迷子になりました。

答え1

sed '/^[[:blank:]]*sprintf/ {s/XYZ/ABC/g;}' infile

これは、行が前にスペースとタブを持たないか、もはや開始されずに続くXYZすべての文字列を置き換えます。ABCsprintf

関連情報