J'ai un simple shell script qui supprime les espaces blancs de fin de fichier. Existe-t-il un moyen de rendre ce script plus compact (sans créer un fichier temporaire) ?
sed 's/[ \t]*$//' $1 > $1__.tmp
cat $1__.tmp > $1
rm $1__.tmp
J'ai un simple shell script qui supprime les espaces blancs de fin de fichier. Existe-t-il un moyen de rendre ce script plus compact (sans créer un fichier temporaire) ?
sed 's/[ \t]*$//' $1 > $1__.tmp
cat $1__.tmp > $1
rm $1__.tmp
Vous pouvez utiliser l'option "en place". -i
de sed
pour Linux et Unix :
sed -i 's/[ \t]*$//' "$1"
Sachez que l'expression supprimera les résidus t
sur OSX (vous pouvez utiliser gsed
pour éviter ce problème). Il se peut qu'il les supprime aussi sur BSD.
Si vous n'avez pas gsed, voici la syntaxe sed correcte (mais difficile à lire) sous OSX :
sed -i '' -E 's/[ '$'\t'']+$//' "$1"
Trois chaînes de caractères entre guillemets sont finalement concaténées en un seul argument/expression. Il n'y a pas d'opérateur de concaténation dans bash, vous placez simplement les chaînes l'une après l'autre, sans espace entre elles.
El $'\t'
se résout comme un caractère de tabulation littéral dans bash (en utilisant Cotation ANSI-C ), de sorte que la tabulation est correctement concaténée dans l'expression.
J'ai un script dans mon .bashrc qui fonctionne sous OSX et Linux (bash uniquement !).
function trim_trailing_space() {
if [[ $# -eq 0 ]]; then
echo "$FUNCNAME will trim (in place) trailing spaces in the given file (remove unwanted spaces at end of lines)"
echo "Usage :"
echo "$FUNCNAME file"
return
fi
local file=$1
unamestr=$(uname)
if [[ $unamestr == 'Darwin' ]]; then
#specific case for Mac OSX
sed -E -i '' 's/[[:space:]]*$//' $file
else
sed -i 's/[[:space:]]*$//' $file
fi
}
à laquelle j'ajoute :
SRC_FILES_EXTENSIONS="js|ts|cpp|c|h|hpp|php|py|sh|cs|sql|json|ini|xml|conf"
function find_source_files() {
if [[ $# -eq 0 ]]; then
echo "$FUNCNAME will list sources files (having extensions $SRC_FILES_EXTENSIONS)"
echo "Usage :"
echo "$FUNCNAME folder"
return
fi
local folder=$1
unamestr=$(uname)
if [[ $unamestr == 'Darwin' ]]; then
#specific case for Mac OSX
find -E $folder -iregex '.*\.('$SRC_FILES_EXTENSIONS')'
else
#Rhahhh, lovely
local extensions_escaped=$(echo $SRC_FILES_EXTENSIONS | sed s/\|/\\\\\|/g)
#echo "extensions_escaped:$extensions_escaped"
find $folder -iregex '.*\.\('$extensions_escaped'\)$'
fi
}
function trim_trailing_space_all_source_files() {
for f in $(find_source_files .); do trim_trailing_space $f;done
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.