當代碼行有“MSG_LOG”時,我嘗試使用 shell 腳本添加新字串。我確實使用這個shell腳本在新行添加了新字串,
#!/bin/bash
############Set File Name
fileName=$1
echo ">>>>Set_FileName is done"
echo ">>>>fileName is ${fileName}"
############Get Elements
lineNumArr=(`grep -n "MSG_LOG" $fileName | awk -F ':' '{print $1}'`)
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');
}
....
如何在保留表格的同時添加新代碼?
uj5u.com熱心網友回復:
使用,您可以復制包含然后替換文本sed的原始行,這將保持制表符間距不變。MSG_LOG
$ sed "/MSG_LOG/{p;s/[[:alpha:]].*/printf('MSG_LOG is show');/}" "$fileName"
uj5u.com熱心網友回復:
添加新行時,您應該添加與前一行相同數量的空格。
你想要這樣的東西
sed -E 's/^(.*)(MSG_LOG\(.*\);)(.*)$/\1\2\3\n\1printf("MSG_LOG is show");/g'
如果我理解正確。
您不必sed每行呼叫一次,因為它會回圈整個檔案。
此外,您需要在printf.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477076.html
上一篇:awk中的多重算術運算
