Vous pouvez utiliser Python. Ce n'est pas très efficace, mais cela permet de faire le travail avec une syntaxe un peu plus souple.
appliquer au dossier
Le script python suivant remplacera "FROM" (mais pas "notFrom") par "TO".
regex_replace.py
import sys
import re
for line in sys.stdin:
line = re.sub(r'(?<!not)FROM', 'TO', line)
sys.stdout.write(line)
Vous pouvez appliquer cela sur un fichier texte, comme
$ cat test.txt
bla notFROM
FROM FROM
bla bla
FROM bla
bla notFROM FROM
bla FROM
bla bla
$ cat test.txt | python regex_replace.py
bla notFROM
TO TO
bla bla
TO bla
bla notFROM TO
bla TO
bla bla
appliquer sur la variable
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo $hello
PYTHON_CODE=$(cat <<END
import sys
import re
for line in sys.stdin:
line = re.sub(r'[0-9]', '', line)
sys.stdout.write(line)
END
)
echo $hello | python -c "$PYTHON_CODE"
sortie
ho02123ware38384you443d34o3434ingtod38384day
howareyoudoingtodday
0 votes
J'ai trouvé une question connexe ici : stackoverflow.com/questions/5658085/
3 votes
POUR INFORMATION,
\s
ne fait pas partie de la syntaxe standard des expressions régulières définies par POSIX (ni BRE ni ERE) ; il s'agit d'une extension de PCRE, qui n'est généralement pas disponible dans l'interpréteur de commandes.[[:space:]]
est l'équivalent le plus universel.2 votes
\s
peut être remplacé par[[:space:]]
En passant, je vous signale qu'il n'y a pas d'autre solution que de faire appel à l'aide,.
por?
et extglob, des extensions au langage de base du shell peuvent être utilisées pour des choses telles que des sous-groupes optionnels, des groupes répétés, etc.3 votes
Une description des motifs de Bash .
0 votes
Je l'utilise dans la version 4.1.11 de bash sur Solaris... echo ${hello//[0-9]} Remarquez l'absence de barre oblique finale.