В ударе нет простой остроты, но существует один в zsh. Добавьте строку autoload -U zmv
к Вашему ~/.zshrc
. Затем можно использовать zmv
и подстановочные знаки zsh и замена параметра.
zmv '/path/to/starting/dir/**/*GEOT14246*' '${f//GEOT14246/GEOT15000}'
Обратите внимание, что это заменяет GEOT14246
в именах файлов также. Вам нужны кавычки вокруг обоих аргументов потому что zmv
анализирует их снова.
На Linux, с ударом или zsh, можно использовать rename
вместо этого. Это заменяет только первое вхождение GEOT14246
в каждом пути.
rename GEOT14246 GEOT15000 /path/to/starting/dir/**/*GEOT14246*
В ударе необходимо включить **
рекурсивный шарик сначала с shopt -s globstar
(добавьте эту строку к Вашему ~/.bashrc
).
Если Вашим дистрибутивом Linux является Debian, Ubuntu или производная, rename
команда является другой. Используйте любой из них:
rename.ul GEOT14246 GEOT15000 /path/to/starting/dir/**/*GEOT14246*
rename 's/GEOT14246/GEOT15000/g' /path/to/starting/dir/**/*GEOT14246*
Попробуйте CSPLIT: INGESFILE == FRAC.TXT
, Выходные файлы == FRAC [NN]
(где nn> 00, потому что файл # 00 пустым)
csplit -f frac frac.txt /^1/ {*}
Форматирование линии Вы можете сделать только на SED
SED :
sed -i 's/^\s*\|\s*$//g ; s/\s\s*/ /g ; /[{}]/!s/ /\n/g ; /^\s*$/d' *.txt
Я помещаю ваш пример данных в ./ Файл
, как:
cat >file <<\IN
# all of your example
IN
, то я сделал следующее:
sed -n 's|\([^ ]*\) *{.*|/\1 {/,/}/w file.\1.par|p' file |
sed -e 's/ */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' -f - file
, который использует один процесс SED
для обрезания данных в индлю И редактируйте его Insluam в режим работы SED
скрипт для второго процесса SED
.
Скрипт, который выполняется, выглядит как ...
/1_01 {/,/}/w file.1_01.par
/1_02 {/,/}/w file.1_02.par
/1_03 {/,/}/w file.1_03.par
/1_04 {/,/}/w file.1_04.par
... но только выполнен после второго SED
делает для каждой строки в Файл ...
... -e 's/ */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' ...
... который сначала сжимает любую последовательность пробелов в одно пространство, удаляет ведущее или конечное пространство, если они остаются, полностью удаляет пустые строки от вывода, и последний переводит все пробелы в \ N
Характер EWLINE для каждой строки, который не соответствует {
.
Итак, для каждого номера строки, который соответствует (заголовок раздела) * {. *
Второй SED
W
обряжает его и все последующие линии до и включая следующую встречущуюся }
в входе в файл. (Рубрика раздела)
, в то время как исходной интенсивности остается незатронутым.
После запуска, что я сделал ...
cat <./file.1_01.par
... и ...
1_01 { ; quite good spirals
reset=2000
type=mandel
passes=1
corners=-0.6014129278/-0.5990935452/0.427747516/0.429487053
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}
, чтобы запустить его, просто скопируйте / вставьте эти два SED ...
строки в ваш терминал и замените Файл имя для всего, что уместно.
У меня также было поехать в ссылку в вашем вопросе ...
sed -n 's|.\([^ ]*\) {.*|/\1 {/,/^}$/w \1.par|p' <<-IN |\
sed -e 's/.//;/{/!y/ /\n/' -f - all.par
$(curl -s 'http://www.calresco.org/pic3/calres3.par' |
tr -s '\r\n ' '\n ' |tee all.par)
IN
, которые разделились все .par
функции в свои собственные файлы - и обрабатывали DOS Линейные окончания:
ls -C
a46.par bugeyed.par flocks.par iconw2b.par manchaos.par swirl5.par
aciddrop.par burr.par galaxy.par juliland.par mandelzm.par trific.par
all.par complex.par highrise.par lace.par redgiant.par
angfish.par eyeeye.par iconvolc.par lavaflow.par scythe.par
Они все названы для имени функции.
cat galaxy.par
galaxy {;Chris Lucas
reset=1950
type=julia
center-mag=+0.03023290053994965/+0.26628255550711930/42.69126/1/67.5
params=-0.1582146627566066/0.6550294654497986
float=y
maxiter=30000
colors=000000GFF<28>x11z00z10<29>zx0zz0zz1<29>zzxzzzzzz<61>zV1zU0zU0zT0<\
28>z10z00z00y00<30>c00b11a11`22_22<25>FFF
}
-121--83247- Обновлено: Shapified и проверено в Gawk
(v.3.1.8) и MAWK
(v. 1.3.3 )
Этот скрипт awk должен делать то, что вы, кажется, просят; Это может работать над другими реализациями AWK, которые поддерживают регулярные полевые и рекордно-разделители:
#!/usr/bin/awk -f
BEGIN {
RS="}\n\n?"
ORS="}\n"
FS="\n"
OFS="\n"
}
{
# compress whitespace in first field
gsub(/[ \t\n]+/," ",$1)
# split remaining fields on whitespace
for (i=2;i<=NF;i++) {
gsub(/[ \t\n]+/,"\n",$i)
}
# remove double-newlines resulting from trailing whitespace
gsub("\n\n+","\n",$0)
print > NR".par"
}
тестирование с вашим вводом в виде file.txt
:
$ ./split.awk file.txt
затем
$ cat 1.par
1_01 { ; quite good spirals
reset=2000
type=mandel
passes=1
corners=-0.6014129278/-0.5990935452/0.427747516/0.429487053
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}
и
$ cat 3.par
1_03 { ; OK, bit dull, not zoomed in far
reset=2000
type=mandel
passes=1
corners=0.3734922373/0.3820837907/-0.243292645/-0.23684898
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}
Я помещаю свой пример данных в ./ Файл
, как:
cat >file <<\IN
# all of your example
IN
, то я сделал следующее:
sed -n 's|\([^ ]*\) *{.*|/\1 {/,/}/w file.\1.par|p' file |
sed -e 's/ */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' -f - file
, который использует один SED
процесс Чтобы обрезать данные в индлю и редактировать его в режиме работы SED
сценарий для второго SED
.
Скрипт, который выполняется, выглядит как ...
/1_01 {/,/}/w file.1_01.par
/1_02 {/,/}/w file.1_02.par
/1_03 {/,/}/w file.1_03.par
/1_04 {/,/}/w file.1_04.par
... Но он выполнен только после второй SED
делает для каждой строки в Файл ...
... -e 's/ */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' ...
... который сначала сжимает любую последовательность пробелов в одно пространство, удаляет ведущее или промежуточное пространство, если они остаются, полностью удаляет пустые строки от вывода, и последний переводит все пробелы в \ N
Характер EWLine для каждой строки, который не соответствует {
.
Итак, для каждого номера строки, который соответствует (заголовок раздела) * {. *
Второй SED
w
обряжает его и все последующие линии до и включая следующую встречущуюся }
в входе в файл. (Секционная заголовка)
, в то время как исходное напряжение остается беззаботно.
После запуска, что я сделал ...
cat <./file.1_01.par
... и ...
1_01 { ; quite good spirals
reset=2000
type=mandel
passes=1
corners=-0.6014129278/-0.5990935452/0.427747516/0.429487053
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}
Чтобы запустить его, просто скопируйте / вставьте эти два SED ...
строки в ваш терминал и замените Файл имя для всего, что уместно.
У меня также было поехать в ссылку в вашем вопросе ...
sed -n 's|.\([^ ]*\) {.*|/\1 {/,/^}$/w \1.par|p' <<-IN |\
sed -e 's/.//;/{/!y/ /\n/' -f - all.par
$(curl -s 'http://www.calresco.org/pic3/calres3.par' |
tr -s '\r\n ' '\n ' |tee all.par)
IN
, которые разделились все .par
функции в свои собственные файлы - и обрабатывали DOS Коннечки линии:
ls -C
a46.par bugeyed.par flocks.par iconw2b.par manchaos.par swirl5.par
aciddrop.par burr.par galaxy.par juliland.par mandelzm.par trific.par
all.par complex.par highrise.par lace.par redgiant.par
angfish.par eyeeye.par iconvolc.par lavaflow.par scythe.par
Они все названы для имени функции.
cat galaxy.par
galaxy {;Chris Lucas
reset=1950
type=julia
center-mag=+0.03023290053994965/+0.26628255550711930/42.69126/1/67.5
params=-0.1582146627566066/0.6550294654497986
float=y
maxiter=30000
colors=000000GFF<28>x11z00z10<29>zx0zz0zz1<29>zzxzzzzzz<61>zV1zU0zU0zT0<\
28>z10z00z00y00<30>c00b11a11`22_22<25>FFF
}