Заменить часть строки с помощью sed - PullRequest
0 голосов
/ 29 марта 2020

У меня есть местоположение:

/Users/spotter/Downloads

и в папке «Downloads» есть два файла:

test1.txt и test2.txt.

Я хочу написать сценарий оболочки, чтобы сохранить все файлы в списке с такой строкой:

file_list="$(ls /Users/spotter/Downloads)"

и echo $file_list вернет:

/Users/spotter/Downloads/test1.txt /Users/spotter/Downloads/test2.txt

Однако я хочу изменить часть имени. В частности, я хочу изменить /Users/spotter часть на gs://my_bucket

Я пробовал это так:

file_list="$(ls /Users/spotter/Downloads | while read path; do dirname "$path" | sed -i "s|/Users/spotter|gs://my_bucket|g"; done)"

, который возвращает:

sed: no input files

когда я делаю echo $file_list Я хочу, чтобы это было выводом:

gs://my_bucket/Downloads/test1.txt

gs://my_bucket/Downloads/test2.txt

РЕДАКТИРОВАТЬ:

Я ДОЛЖЕН использовать ls, и мне нужно сохранить замену всей строки в одном списке в конце, так или иначе.

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Если вы можете перейти от ls, чтобы найти и хотите придерживаться sed:

file_list=$(find /Users/spotter/Downloads -type f | sed 's|/Users/spotter/|gs://my_bucket/|g')
0 голосов
/ 29 марта 2020

С GNU находят:

file_list=$(find /Users/spotter/Downloads/ -type f -printf 'gs://my_bucket/Downloads/%f\n')

или только с bash:

cd /Users/spotter/Downloads/
file_list=$(for i in *.txt; do echo "gs://my_bucket/Downloads/$i"; done)
...