如何在保持制表符行的同时添加新字符串?

How could I add new string while keeping the tab line?

当代码行有“MSG_LOG”时,我尝试使用 shell 脚本添加新字符串。 我确实使用此 shell 脚本在新行添加了新字符串,

#!/bin/bash

############Set File Name
fileName=
echo ">>>>Set_FileName is done"
echo ">>>>fileName is    ${fileName}"

############Get Elements
lineNumArr=(`grep -n "MSG_LOG" $fileName | awk -F ':' '{print }'`)
echo ">>>>Getting LineNumArr is done"
for lineNum in "${lineNumArr[@]}"
do
############Replace logger
        sed -i "${lineNum} a printf('MSG_Log is show');" $fileName
        echo ">>>>Replace_logger is Done"
done
echo ">>>>for loop is closed"
exit

但它不会密切关注现有代码行。 例如,我想制作这样的 .cpp 文件,

#include<iostream>
int main(void){
  bool value=true;
....
     if(value){
        MSG_LOG("VALUE IS TRUE");
        printf('MSG_LOG is show');
      }
....

但是当我启动这个 shell 脚本时,结果是...

#include<iostream>
int main(void){
  bool value=true;
....
     if(value){
        MSG_LOG("VALUE IS TRUE");
printf('MSG_LOG is show');
      }
....

如何在保留表格行的同时添加新代码?

在添加新行时,您应该添加与上一行相同数量的空格。

你想要这样的东西

sed -E 's/^(.*)(MSG_LOG\(.*\);)(.*)$/\nprintf("MSG_LOG is show");/g'

如果我没理解错的话。

您不必每行调用一次 sed,因为它会遍历整个文件。

此外,printf.

中需要双引号

使用 sed,您可以复制包含 MSG_LOG 的原始行,然后替换文本,这将保持制表符间距不变。

$ sed "/MSG_LOG/{p;s/[[:alpha:]].*/printf('MSG_LOG is show');/}" "$fileName"