J’ai besoin d’un liner awk / cut pour obtenir tout entre un motif et le dernier nom de fichier, par exemple:
$ cat .exportfiles.text /twigs/WP_Fix/Code/SharedApp/src/gov/illinois/ies/business/rules/ed/CorticonFinIncomeEntiyLoader.java /twigs/WP_Fix/Code/BEAN/Framework/ejbModule/gov/illinois/ies/business/rules/entities/fin/Income.java /twigs/WP_Fix/settings/Environment/RT/properties/build.properties /twigs/WP_Fix/test/Environment/DEV/properties/build.properties
Sortie désirée:
Code/SharedApp/src/gov/illinois/ies/business/rules/ed Code/BEAN/Framework/ejbModule/gov/illinois/ies/business/rules/entities/fin settings/Environment/RT/properties test/Environment/DEV/properties
sed -e 's,/twigs/WP_Fix/\(.*\)/.*,\1,' < exportfiles.text
Voici une solution cut
pour être complet.
cut -d / -f 4- .exportfiles.text | xargs -n 1 dirname
Il n’utilise pas seulement cut
, car il est impossible de spécifier des colonnes à partir du dernier précédent.
Cette ligne pourrait fonctionner:
awk -F'/[^/]*$' '{sub("/twigs/WP_Fix/","",$1)}$0=$1' file
le "/twigs/WP_Fix/"
pourrait être une variable shell pour rendre la ligne plus flexible.
Une solution awk
alternative qui ne vous permet pas de gérer vous-même les séparateurs:
awk -v FS=/ -v OFS=/ '{ for (i=1; i
... au golf, pour les gens qui aiment ce genre de chose:
awk -F/ -v OFS=/ '{for(i=0;++i
Mais celui-ci pourrait être plus facile si vous sortez le Perl:
perl -F/ -lane 'print join "/", @F[ 3 .. ($#F - 1) ]' exportfiles.txt
..ou
perl -F/ -lane '$,="/";print@F[3..$#F-1]' exportfiles.txt
Solution simple bash
:
while IFS= read -r file; do file=${file%/*}; file=${file#/*/*/}; echo "$file"; done < exportfiles.txt
[jaypal:~/Temp] while IFS= read -r file; do file=${file%/*}; file=${file#/*/*/}; echo "$file"; done < exportfiles.txt Code/SharedApp/src/gov/illinois/ies/business/rules/ed Code/BEAN/Framework/ejbModule/gov/illinois/ies/business/rules/entities/fin settings/Environment/RT/properties test/Environment/DEV/properties
perl -F"/" -lane 'print join "/",@F[3..scalar(@F)-2]' your_file
testé:
> cat temp /twigs/WP_Fix/Code/SharedApp/src/gov/illinois/ies/business/rules/ed/CorticonFinIncomeEntiyLoader.java /twigs/WP_Fix/Code/BEAN/Framework/ejbModule/gov/illinois/ies/business/rules/entities/fin/Income.java /twigs/WP_Fix/settings/Environment/RT/properties/build.properties /twigs/WP_Fix/test/Environment/DEV/properties/build.properties > perl -F"/" -lane 'print join "/",@F[3..scalar(@F)-2]' temp Code/SharedApp/src/gov/illinois/ies/business/rules/ed Code/BEAN/Framework/ejbModule/gov/illinois/ies/business/rules/entities/fin settings/Environment/RT/properties test/Environment/DEV/properties >
Au-dessus, j’ai utilisé autosplit.Au lieu de cela, vous pouvez utiliser cette fonction de la même façon:
perl -lne 'print $1 if(/\/twigs\/WP_Fix\/(.*)\//)' your_file