sed 命令检查任何列中行的第一个单词并替换

sed 命令检查任何列中行的第一个单词并替换

文件.txt:

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

以上是具有适当缩进的文件的示例内容。尝试XYZABCusing替换时有点困难sed

  1. 使用sed -i '/^.*sprintf/ s/XYZ/ABC/g' file.txtBut 时,这会导致将 (printf, asprintf) 作为比较单词并替换整个文件中以 (sprintf,asprintf 等) 开头的每一个出现的行,尽管我只需要替换包含sprintf.
  2. 在这种情况下,当用于sed -i '/^.sprintf/ s/XYZ/ABC/g' file.txt比较行的第一个单词时,即sprintf比较和替换,但如果文件中存在额外缩进,则会失败。

有没有什么方法可以特别比较从任何地方开始的单词,然后 sed 进行替换。

sed -r 's/^[ \t]*//'我遇到的一种方法是,使用然后 apply将 file.txt 的内容对齐到 std 输出的左侧sed -i '/^.sprintf/ s/XYZ/ABC/g' file.txt,有没有办法一次性组合和运行或任何其他方式来实现这一目标?这似乎不太有效,我有点迷失了。

答案1

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

这会将所有XYZ字符串替换为ABC行以无或多个前导空格和制表符开头的位置,后跟sprintf

相关内容