Je souhaite supprimer le 5ème mot de chaque ligne d'un fichier.
Le contenu actuel du fichier:
File is not updated or and will be removed
System will shut down f within 10 seconds
Please save your work 55 or copy to other location
Kindly cooperate with us D
Production attendue:
File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us
text-processing
sed
awk
pmaipmui
la source
la source
-f
n'est pas pris en charge dans moncut
(GNU) au moins ..--complement
drapeau pour simplifier les choses:cut --complement -d ' ' -f5
. N'oubliez pas de rediriger la sortie vers un nouveau fichier, puismv
sur l'original.awk: supprimer le 5ème champ
Si vous souhaitez enregistrer le fichier sur place: /programming//q/16529716/7552
Vous pouvez simplement effacer le contenu du 5ème champ, mais cela laisse 2 séparateurs de champ de sortie consécutifs:
la source
Avec POSIX sed:
la source
_
et rien d'autre alors:blank:
ou:space:
?\(
groupe de capture\)
?glenn a proposé une solution équivalente à
Comme lui et d’autres l’ont souligné, cette
Un hack pour résoudre le troisième problème est
Cela laissera toujours un ou plusieurs espaces ajoutés à la fin de toute ligne contenant cinq mots ou moins. Si vous pouvez identifier un mot qui n'apparaîtra jamais dans l'entrée,
gérera même cela (mais cela laisse toujours les problèmes 1 et 2).
la source
Une version plus robuste (sed prend le modèle le plus long possible et le modèle avec
*
pourrait manquer la séparation ou le mot dans la première version) mais une version un peu plus longuela source
sed 's/[^[:blank:]]*//5'
sed 's/[[:blank:]*[^[:blank:]]*//5'
c'est mieux. Très bon point. Je soupçonnais sed de prendre chaque caractère comme une entité, mais cela prend le plus grand modèle incassable en tant qu'entitésed 's/[[:blank:]][^[:blank:]]*//4'
supprimera entièrement le 5ème champ.sed 's/[[:blank:]][^[:blank:]][^[:blank:]]*//4'
, ou, w / GNU / BSD / Toyboxsed
s:sed -E 's/[[:blank:]][^[:blank:]]+//4'
.Perl.
la source
Une autre possibilité, en supposant une coupure GNU:
la source
Utilisation de Perl> 5.10 (et sortie réussie de toutes les lignes: 0)): -
la source