Comment utiliser sed
pour remplacer la date par un Word. J'ai essayé de faire ça:
tmp=`date +%d`
echo $tmp
if [ $tmp -lt 10 ]
then
pat="d"
echo $pat
else
pat="dd"
echo $pat
fi
cal | sed "s/$tmp/$pat/"
Et la sortie est comme ça:
robin@robin-VirtualBox:~/lx$ bash p13.sh
27
dd
April 2014
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Modifier:
Je veux la date 27
pour changer en dd
, comme ici:
April 2014
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
dd 28 29 30
TL; DR: Utilisez -h
lors de l'utilisation de cal
Pourquoi?
La commande cal
imprime le jour en cours avec des caractères spéciaux ("surbrillance"?). J'ai découvert cela en l'enregistrant dans un fichier et en utilisant nano
( pascat
) pour le lire:
$ cal >> out
$ nano out
Vous verrez maintenant ce qui suit:
Abril 2014
do lu ma mi ju vi sá
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
_^H2_^H7 28 29 30
À côté de l'espagnol (désolé), 27 n'est pas avec des caractères simples.
Maintenant, si vous utilisez -h
ceci est résolu:
$ cal -h >> out2
$ nano out2
Votre sortie doit être comme ceci afin que vous puissiez l'analyser sans problème:
Abril 2014
do lu ma mi ju vi sá
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Solution
Dans votre script, remplacez cal | sed "s/$tmp/$pat/"
avec cal -h | sed "s/$tmp/$pat/"
Source: http://netbsd.gw.com/cgi-bin/man-cgi?cal+1+NetBSD-current
Apparemment, vous ne pouvez pas analyser la sortie de cal BSD pour le jour en cours. C'est parce qu'il est mis en évidence. Si vous désactivez la mise en surbrillance avec le -h
switch, cela fonctionnera:
➜ ~ cal -h | sed "s/$tmp/$pat/"
Abril 2014
do lu ma mi ju vi sá
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
dd 28 29 30
Pour identifier la sortie de cal, vérifiez la strace:
strace cal
[...] # tons of lines here
write(1, " 1 2 3 4 5 \n", 23 1 2 3 4 5
) = 23
write(1, " 6 7 8 9 10 11 12 \n", 23 6 7 8 9 10 11 12
) = 23
write(1, "13 14 15 16 17 18 19 \n", 2313 14 15 16 17 18 19
) = 23
write(1, "20 21 22 23 24 25 26 \n", 2320 21 22 23 24 25 26
) = 23
write(1, "\33[7m27\33[27m 28 29 30 \n", 3227 28 29 30
) = 32
write(1, " \n", 23
) = 23
exit_group(0) = ?