J'ai écrit un code qui ** réécrit la chaîne de caractères avec un script shell et remplit les parties manquantes avec des espaces **, donc je garderai un mémorandum de ce que j'ai vérifié et où j'ai trébuché.
Une histoire lors de la formation en langage C. Lors de l'écriture du code source, il était nécessaire de réécrire le commentaire d'en-tête à chaque fois. Par exemple
training1-1.c
/*###################################################*/
/*# File : training1-1.c #*/
/*# Date : 2019/10/22 #*/
/*###################################################*/
int main(void){
printf("Hello World\n");
return 0;
}
Comme, Kanji. Surtout pendant la formation, les noms de fichiers sont presque les mêmes que dans "training1-1.c", donc si vous répétez la création de fichiers → renommer le nom de fichier, il sera difficile de retaper à chaque fois.
Comme je faisais tout, de la création de fichiers à la compilation dans l'environnement Linux, j'ai essayé de le créer en utilisant la connaissance du script shell que j'étudiais juste.
Le script shell (zikko.sh) ** qui édite, compile et exécute le commentaire d'en-tête ** créé cette fois sera utilisé avec le modèle sous-jacent (template.c).
La méthode d'exécution et le contenu de zikko.sh et template.c sont les suivants. De plus,
.sh
#Méthode d'exécution
$ ./zikko.sh template <nom de fichier>
zikko.sh
#!/bin/bash
template=$1
newFile=$2
date=$(date "+%Y/%m%d")
convertSymbolFile=$"FILE_NAME"
convertSymbolDate=$"YYYY/MM/DD"
#Modifier le fichier d'en-tête si le fichier n'existe pas
if [ ! -e $newFile.c ]; then
#Ajustez l'espace pour changer le titre du fichier
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
#Longueur de la chaîne convertie> FILE_J'ai essayé d'écrire le traitement pour NAME, mais j'ai abandonné en raison de contraintes de temps
#Je pense qu'il n'y a aucun problème si la chaîne de caractères de convertSymbolFile est allongée.
fi
#Date de modification
sed -i -e "s:$convertSymbolDate:$date:g" $newFile.c
fi
#Commencez l'édition à partir de la ligne où la fonction principale est écrite
mainFuncLow=$(grep SOURCE_CODE -n $newFile.c | cut -d ":" -f 1)
vim -c $mainFuncLow $newFile.c
#Compiler et exécuter
gcc -o $newFile.x $newFile.c
./$newFile.x
template.c
/*###################################################*/
/*# File : FILE_NAME #*/
/*# Date : YYYY/MM/DD #*/
/*###################################################*/
int main(void){
//SOURCE_CODE
return 0;
}
Si vous ajoutez la chaîne de caractères avant la conversion au modèle et que vous jouez un peu avec le processus de modification du titre du fichier zikko.sh, vous devriez être en mesure de gérer l'ajout de simples commentaires d'en-tête ... J'ai l'impression que le code est long pour le travail qui semble simple. S'il vous plaît laissez-moi savoir s'il existe une meilleure façon.
Quand j'ai recherché "Remplacement de chaîne de caractères Linux, répéter", j'ai trouvé pas mal d'articles sur la répétition de symboles, mais je n'ai pas trouvé beaucoup d'articles qui inséraient des espaces à plusieurs reprises. La méthode la plus simple que j'ai trouvée était d'envoyer le résultat de la commande seq
à la commande tr
dans le pipeline [^ 1].
Point de trébuchement 1.sh
#diffOfNum=4
$ seq -s" " $((diffOfNum+1)) | tr -d '[:digit:]'
#->***** Au lieu d'espace*Afficher avec
Afin de combiner des chaînes de caractères avec un script shell, il semble que les variables shell doivent être écrites consécutivement [^ 2].
Point de trébuchement 2.sh
#newFile=file1 ※<nom de fichier>
#numOfSpace=****
$ newFileTitle=$newFile$numOfSpace
#->file1****
J'ai souvent utilisé la commande sed
pour remplacer les chaînes, je vais donc noter brièvement comment l'utiliser et où j'ai trébuché. Tout d'abord, la méthode d'exécution est la suivante.
$ sed [option] <scénario> <nom de fichier>
Recommended Posts