bash: заменить в строке './' для новой строки - PullRequest
0 голосов
/ 03 августа 2011

после использования find мне нужно перебрать файлы

var=`find -name "reg"`
#replace ./ for newline
for file in $var; do 
    #something
done

edit: решено с $ {string # * /}, оно убирает ./ Я могу выжить с этим, я думаю

Ответы [ 4 ]

2 голосов
/ 05 августа 2011

EDIT:

Меня не волнует, как вы получаете файл $, используя командную строку или что-то еще, что вам подходит. Я гораздо больше обеспокоен частью вашего вопроса #do something, которая, как я считаю, является основным вопросом, и всем, кто публикует различные сообщения find -name 'reg' | xargs ..., следует дважды подумать, прежде чем усложнять вопросы для ОП.
<ч /> используйте sed

var=`find -name "reg"`
#replace ./ for newline
for file in $var; do 
    sed -i 's|\./|\n|g' $file
done

уберите опции -i, чтобы получить вывод на экран, если получен удовлетворительный вывод, используйте -i, чтобы фактически изменить строку.
Во втором чтении, может быть, я заменяю наоборот, возможно, вы хотите заменить символ новой строки на ./? Его немного сложно

sed -i ':a;N;$!ba;s|\n|./|g' $file

как всегда, протестируйте без опции -i и затем решите, хотите ли вы изменить файл.
Для объяснения второй магии sed прочитайте это SO . Это точно так же, за исключением символа ./ для замены строки.

0 голосов
/ 06 августа 2011

хорошо, я наконец-то решил, ребята, я мог бы удалить строку ./
=. / Blabla / bla

string = $ {string # * /} # удалить материал до первого / включенного

echo $ string #got blabla / bla

0 голосов
/ 03 августа 2011
while IFS= read -r line; do
  var="${line#./}"
  echo "$var"
done < <(find . -name reg -print)
0 голосов
/ 03 августа 2011
find -name "reg" | while read file; do ...; done
...