LINUX.ORG.RU

всемогущий sed

 , , ,


0

1

В общем, проблема: цикл, идет замена в строке через sed, первый шаг- 1.txt находит заменяет, второй шаг- out1.txt не находит. Суть самого задания-нужно из обеих строк удалить все подстроки из переменной $var1.

$fil11 и $fil21 задаются через ls

$var1 получается в результате др цикла

PS пробелы в sed стоят специально, чтобы при поиске 1.txt он не удалил часть подстроки out1.txt

#!/bin/bash
export fil11="1.txt 3com.cpp out1.txt sigusr.cpp"
export fil21="1.txt forkdemo.cpp out1.txt sigint.cpp"
export var1="1.txt out1.txt"

for file in $var1
do
fil11=$(echo -e " $fil11" | sed -s "s/ $file//")
fil21=$(echo -e " $fil21" | sed -s "s/ $file//")
done

echo $fil11
echo $fil21

решил

Решил проблему

добавил при определении переменных через ls ключ -m. а потом через sed убрал все запятые. проблема была в ls там не пробелы между названиями файлов.

dmanev ()

export fil11
export fil11

так и задумано?

nerve ★★ ()

всемогущий bash

#!/bin/bash
fil11=(1.txt 3com.cpp out1.txt sigusr.cpp)
fil21=(1.txt forkdemo.cpp out1.txt sigint.cpp)
var1=(1.txt out1.txt)

for i in "${var1[@]}"; do
                for f in "${!fil11[@]}"; do
                                [[ $i = ${fil11[f]} ]] && unset "fil11[f]"
                done
                for f in "${!fil21[@]}"; do
                                [[ $i = ${fil21[f]} ]] && unset "fil21[f]"
                done
done

echo "${fil11[@]}"
echo "${fil21[@]}"

ashot ★★★ ()
Ответ на: всемогущий bash от ashot

А вообще надо изначально было заполнять массивы как ассоциированные и эти вложенные циклы будут самим bash-ем исполняться внутрях.

vodz ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.