Ich habe einen Code geschrieben, der ** die Zeichenfolge mit einem Shell-Skript umschreibt und die fehlenden Teile mit Leerzeichen ausfüllt **, damit ich ein Memorandum darüber aufbewahre, was ich überprüft habe und wo ich gestolpert bin.
Eine Geschichte während des Trainings in C-Sprache. Beim Schreiben des Quellcodes musste der Header-Kommentar jedes Mal neu geschrieben werden. Zum Beispiel
training1-1.c
/*###################################################*/
/*# File : training1-1.c #*/
/*# Date : 2019/10/22 #*/
/*###################################################*/
int main(void){
printf("Hello World\n");
return 0;
}
Wie Kanji. Insbesondere während des Trainings sind die Dateinamen fast dieselben wie in "training1-1.c". Wenn Sie also die Dateierstellung → das Umbenennen von Dateinamen wiederholen, ist es jedes Mal schwierig, sie erneut einzugeben.
Da ich alles von der Dateierstellung bis zur Kompilierung in der Linux-Umgebung gemacht habe, habe ich es mit dem Wissen des Shell-Skripts gemacht, das ich gerade studiert habe.
Das Shell-Skript (zikko.sh) **, das den diesmal erstellten ** Header-Kommentar bearbeitet, kompiliert und ausführt, wird zusammen mit der zugrunde liegenden Vorlage (template.c) verwendet.
Die Ausführungsmethode und der Inhalt von zikko.sh und template.c lauten wie folgt.
.sh
#Ausführungsmethode
$ ./zikko.sh template <Dateiname>
zikko.sh
#!/bin/bash
template=$1
newFile=$2
date=$(date "+%Y/%m%d")
convertSymbolFile=$"FILE_NAME"
convertSymbolDate=$"YYYY/MM/DD"
#Bearbeiten Sie die Header-Datei, wenn die Datei nicht vorhanden ist
if [ ! -e $newFile.c ]; then
#Passen Sie den Platz an, um den Titel der Datei zu ändern
if [ ${#newFile} -le ${#convertSymbolFile} ]; then
diffOfStr=$((${#convertSymbolFile}-${#newFile}))
numOfSpace=$(seq -s" " $((diffOfNum+1)) | tr -d '[:digit:]')
newFileTitle=$newFile$numOfSpace
sed -e "s:$convertSymbolFile:$newFileTitle:g" $template.c > $newFile.c
#else
#Länge der konvertierten Zeichenfolge> FILE_Ich habe versucht, die Verarbeitung für NAME zu schreiben, habe aber aus Zeitgründen aufgegeben
#Ich denke, dass es kein Problem gibt, wenn die Zeichenfolge von convertSymbolFile verlängert wird.
fi
#Datum ändern
sed -i -e "s:$convertSymbolDate:$date:g" $newFile.c
fi
#Beginnen Sie mit der Bearbeitung in der Zeile, in der die Hauptfunktion geschrieben ist
mainFuncLow=$(grep SOURCE_CODE -n $newFile.c | cut -d ":" -f 1)
vim -c $mainFuncLow $newFile.c
#Kompilieren und ausführen
gcc -o $newFile.x $newFile.c
./$newFile.x
template.c
/*###################################################*/
/*# File : FILE_NAME #*/
/*# Date : YYYY/MM/DD #*/
/*###################################################*/
int main(void){
//SOURCE_CODE
return 0;
}
Wenn Sie die Zeichenfolge vor der Konvertierung in die Vorlage hinzufügen und mit dem Ändern des Titels der Datei zikko.sh ein wenig spielen, sollten Sie in der Lage sein, einfache Header-Kommentare hinzuzufügen ... Ich denke, der Code ist lang für die Arbeit, die einfach erscheint. Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt.
Als ich nach "Linux-Zeichenfolgen ersetzen, wiederholen" suchte, fand ich einige Artikel über das Wiederholen von Symbolen, aber ich konnte nicht viele Artikel finden, in denen wiederholt Leerzeichen eingefügt wurden. Die einfachste Methode, die ich gefunden habe, war, das Ergebnis des Befehls seq
an den Befehl tr
in der Pipeline [^ 1] zu senden.
Stolperpunkt 1.sh
#diffOfNum=4
$ seq -s" " $((diffOfNum+1)) | tr -d '[:digit:]'
#->***** Anstelle von Raum*Anzeige mit
Um Zeichenfolgen mit einem Shell-Skript zu kombinieren, sollten Shell-Variablen nacheinander geschrieben werden [^ 2].
Stolperpunkt 2.sh
#newFile=file1 ※<Dateiname>
#numOfSpace=****
$ newFileTitle=$newFile$numOfSpace
#->file1****
Ich habe oft den Befehl sed
verwendet, um Zeichenfolgen zu ersetzen, daher werde ich kurz darauf hinweisen, wie man ihn verwendet und wo ich gestolpert bin. Erstens ist die Ausführungsmethode wie folgt.
$ sed [Möglichkeit] <Skript> <Dateiname>
Recommended Posts