2
votes

Nom de fichier de sous-chaîne sous Unix à l'aide de la commande sed

Je souhaite sous-traiter le nom du fichier sous unix en utilisant la commande sed .

Nom du fichier: Test_Test1_Test2_10082019_030013.csv.20191008-075740

Je veux que les caractères après le 3e tiret bas ou (tous les caractères après Test2) soient imprimés.

Est-ce que cela peut être fait en utilisant la commande sed ?

J'ai essayé cette commande

sed 's/^.*_\([^_]*\)$/\1/' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740' 

mais cela donne le résultat comme 030013.csv.20191008-075740 J'en ai besoin de 10082019_030013.csv.20191008-075740

Merci Neha

sed

3 commentaires

Qu'est-ce que tu as essayé jusque-là?


J'ai essayé cette commande ... sed 's /^.* ([^ ] *) $ / \ 1 /' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740', mais je reçois la sortie 030013.csv.20191008-075740. J'en ai besoin de 10082019_030013.csv.20191008-075740


@NehaSingh, Bien que vous ayez montré vos efforts, les commentaires ne sont pas destinés à ajouter du code, alors essayez toujours de les ajouter dans votre question elle-même, applaudissements et bon apprentissage.


3 Réponses :


2
votes

Pourriez-vous s'il vous plaît essayer de suivre.

sed 's/[^_]*_[^_]*_[^_]_\(.*\)/\1/' Input_file

Ou selon la gentille suggestion de Bodo:

sed 's/\([^_]*\)_\([^_]*\)_\([^_]*\)_\(.*\)/\4/'  Input_file


0 commentaires

3
votes

Pour supprimer du début à l'inclusion du 3ème trait de soulignement, vous pouvez utiliser

sed -r 's/^([^_]*_){3}//' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740'

Cela supprime la partie initiale qui se compose de 3 groupes de (n'importe quel nombre de caractères non-soulignés suivis d'un souligner). Le résultat est

10082019_030013.csv.20191008-075740

Si vous utilisez GNU sed , vous pouvez le remplacer par des expressions régulières étendues et omettre les contre-obliques.

sed 's/^\([^_]*_\)\{3\}//' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740'


0 commentaires

1
votes

Cela pourrait fonctionner pour vous (GNU sed):

sed 's/_/\n/3;s/.*\n//;t;s/Test2/\n/;s/.*\n//;t;d' file

Remplacez le troisième _ par une nouvelle ligne, puis supprimez tout jusqu'à et y compris la première nouvelle ligne. Si cela réussit, renflouez et imprimez le résultat. Sinon, essayez la même méthode avec Test2 et si cela échoue, supprimez toute la ligne.


0 commentaires