sed
принимает имя файла в качестве сценария:
sed -f sed.script
В некоторых версиях sed
(особенно в (более старых?) HP-UX) есть ограничения на количество строк, которые могут появиться в сценарии sed
- и ограничение там составляет около 100. Большинство версий sed
не имеют явного ограничения, хотя ограничение может превышать 10000 замен.
Вы должны рассмотреть возможность создания набора сценариев, dir1.sed
, dir2.sed
и dir3.sed
.
Затем вы можете написать:
for dir in 1 2 3
do
(
cd $dir &&
sed -f ../dir$dir.sed A.txt > B.txt
)
done
Обратите внимание, что если вам нужно сделать несколько проходов (потому что вам нужно было создать dir1.1.sed
, dir1.2.sed
, ... dir1.N.sed
), то вам необходимо организовать редактирование B.txt на втором проходе и т. Д.
Обратите внимание на использование вложенной оболочки (...)
для изоляции сценария управления от операций cd
. Тогда нет нужды в cd ..
. Я косо смотрю на любой скрипт, который содержит ...; cd somedir; ...; cd ..
.
Некоторые версии sed
(в соответствии с GNU) поддерживают модификацию файлов на месте: sed -i -f dir1.sed A.txt
. В противном случае, если вам нужно сохранить A.txt
, сначала сделайте копию, а затем отредактируйте копию:
for dir in 1 2 3
do
(cd $dir; cp A.txt B.txt)
done
for dir in 1 2 3
do
for script in 1 2 3 4 ... N
do
(
cd $dir
sed -f ../dir$dir.$script.sed B.txt > C.txt
mv C.txt B.txt
)
done
done
Содержимое файлов сценария sed
выглядит следующим образом:
s/XXX/123/
s/YYY/234/
s/zzz/abc/
и т. Д. - это sed
команды.