ファイル.txt:
if (early_timeout == TRUE) {
sprintf(send_buff, "XYZ: Command timed out",
command_timeout);
result = UNKNOWN;
}
上記は、適切なインデントが適用されたファイルのサンプル内容です。を使用XYZ
して交換しようとするABC
と少し難しいですsed
。
- Butを使用すると、
sed -i '/^.*sprintf/ s/XYZ/ABC/g' file.txt
(printf、asprintf)が単語で比較され、ファイル全体(sprintf、asprintfなど)で始まるすべての行が置き換えられますsprintf
。 - この場合、
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
すべての文字列を置き換えます。ABC
sprintf