如何在保持制表符行的同时添加新字符串?
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"
当代码行有“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"