Строка замены в s/PATTERN/REPLACEMENT/
не является регулярным выражением.
Вы сможете захватить то, что совпадает с частью шаблона, и использовать его при замене, если хотите:
sed -r 's/foo(.*)foo/hat\1car/g' file
Это захватит все, что находится между двумя вхождениями foo
в одной строке, и вставит этот бит между hat
и car
. \1
говорит: «вставьте все, что было захвачено первыми круглыми скобками».
Обратите внимание, что .*
является «жадным», поэтому, если у вас есть foobarfoofoobarfoo
, \1
будет barfoofoobar
, а не bar
.
Вот простой от -до -способ сделать это для каждой строки в вашем testregions.bed
. Сначала удалите все пробелы в исходном файле testregions.bed
и сохраните только числа в новом файле new.txt
вот так:
cat testregions.bed | tr -d "[:blank:]" > new.txt
Затем вы создадите новый файл для каждой строки в вашем new.txt
вот так:
cat new.txt | while read line
do
touch "$line".zip
done
Затем вы можете удалитьnew.txt
:
rm new.txt
Таким образом, ваш скрипт test.sh
для создания .zip
файлов из testregions.bed
будет выглядеть следующим образом:
#!/bin/sh
cat testregions.bed | tr -d "[:blank"]" > new.txt
cat new.txt | while read line
do
touch "$line".zip
done
rm new