How to remove a component of absolute PATH?
Let us consider an absolute path "/export/home/guru/prog/perl".
$ x="/export/home/guru/prog/perl"The requirement is to remove the 4th component of the absolute path so that it becomes "/export/home/prog/perl".
1. cut command:
$ echo $x | cut -d"/" -f -3,5- /export/home/prog/perlcut is the straightforward option. Since we want to drop the 4th field, cut fields 1 to 3, and then from 5 onwards till the end.
2. sed:
$ echo $x | sed 's|[^/]*/||4' /export/home/prog/perlRemove non-slash(/) characters till a slash is found, and do this only on the 4th occurrence. Using this, the 4th component gets removed.
3. awk:
$ echo $x | awk -F"/" '{$4="";}1' OFS="/" | tr -s "/" /export/home/prog/perlUsing / as delimiter, the 4th field is initialized. However, this will leave with 2 slashes after "home". In order to squeeze the extr slash, tr command is used.
4. Perl:
$ echo $x | perl -F"/" -ane 'print join("/", @F[0 .. 2],@F[4 .. $#F]);' /export/home/prog/perlA nice option. Using the auto-split option(-a) with "/" as delimiter, the path is split into the special array @F. The array components are joined using "/" and printed by excluding the 4th(index 3) component.
5. Another Perl solution:
$ echo $x | perl -F"/" -ane 'splice(@F,4,1); print join "/",@F;' /export/home/guru/perlUsing splice, we can simply delete the element in offset 4 which is the 4th component. And then the remaining elements are joined and printed.
No comments:
Post a Comment