$ awk '/SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}} FNR==NR{next} /SETTINGS START/{print substr(a,2)} /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next} 1' file2 file1
ANJALI NISHA
// +++ CUSTOMIZATION SETTINGS START +++
WELCOME ALL
// +++ CUSTOMIZATION SETTINGS END +++
PREETI MONA
awk
Неявно цикл через линию файлов по строке. В этом случае у нас первый цикл File2 File2, затем File1.
/ Настройки начала /, / / {{{if (fnr == nr) {a = a "\ n" $ 0}}}
Раздел «Настройки из файла2» захвачен в переменной A
.
FNR == NR {Далее}
Если мы все еще читаем файл2, пропустите остальные команды и перейдите на следующую строку ввода.
/ Настройки начала / {Print Substr (A, 2)}
Если мы доберемся отсюда, мы обработаем файл1. Когда мы видим начало раздела настроек, распечатайте строку, которую мы сохранили в переменной A
.
/ Настройки начала /, / / настройки / настройки Настройки End / {следующая}
Если мы находимся в разделе «Настройки» файла1, пропустите остальные команды и перейдите к следующей строке ввода.
1
1
Криптическая скратформа AWK для печати текущей строки. Мы только добираемся до этого утверждения, если мы находимся в File1, но не в разделе «Настройки».
Вы можете запустить эту команду, которая просто показывает, что она будет делать:
ls -d XYZ*/* |
sed -n s'|\(XYZ[0-9][0-9]\)\([^/]*\)/\(\2_.*\)|mv & \1\2/\1\3|p' |
cat
и если вы хотите, чтобы команды выполнялись, замените cat
на sh
.
С помощью zsh
:
autoload zmv # best in ~/.zshrc
zmv '(XYZ??)(*)/(*)' '$1$2/$1$3'
С bash
:
for f in XYZ*/*; do mv -v "$f" "${f%/*}/${f:0:5}${f##*/}"; done
Цикл for
проходит через все XYZ *
каталоги. Затем команда mv
переименовывает файлы.
Где:
$ f
- это исходное имя файла $ {f% / *}
- это имя каталога $ {f: 0: 5}
- это префикс $ {f ## * /}
- это исходное имя файла