Home > OS >  How do i add whitepsaces to a String while filling it up in a for-loop in Bash?
How do i add whitepsaces to a String while filling it up in a for-loop in Bash?

Time:12-02

Have a string as follows:

files="applications/dbt/Dockerfile applications/dbt/cloudbuild.yaml applications/dataform/Dockerfile applications/dataform/cloudbuild.yaml"

Want to extract the first two directories and save it as another string like this:

"applications/dbt applications/dbt applications/dataform pplications/dataform"

But while filling up the second string, its being saved as

applications/dbtapplications/dbtapplications/dataformapplications/dataform

What i tried:

files="applications/dbt/Dockerfile applications/dbt/cloudbuild.yaml applications/dataform/Dockerfile applications/dataform/cloudbuild.yaml"

arr=($files)
#extracting the first two directories and saving it to a new string
for i in ${arr[@]}; do files2 =$(echo "$i" | cut -d/ -f 1-2); done

echo $files2

files2 echoes the following

applications/dbtapplications/dbtapplications/dataformapplications/dataform

CodePudding user response:

You could use a for loop as requested

for dir in ${files}; 
  do file2 =$(printf '%s ' "${dir%/*}")
done

which will give output

$ echo "$file2"
applications/dbt applications/dbt applications/dataform applications/dataform

However, it would be much easier with sed

$ sed -E 's~([^/]*/[^/]*)[^ ]*~\1~g' <<< $files
applications/dbt applications/dbt applications/dataform applications/dataform

CodePudding user response:

Reusing your code as much as possible:

(assuming to only remove the last right part):

arr=( applications/dbt/Dockerfile applications/dbt/cloudbuild.yaml applications/dataform/Dockerfile applications/dataform/cloudbuild.yaml )
#extracting the first two directories and saving it to a new string
for file in "${arr[@]}"; do
    files2 ="${file%/*} "
done
echo "$files2"
applications/dbt applications/dbt applications/dataform
  • Related