Как заставить sed прочитать файл script из script?

Недавно я наткнулся на следующую команду grep:

/usr/xpg4/bin/grep -Ff grep.txt input.txt > output.txt

который согласно моему пониманию означает, что из input.txt grep вопрос содержится в grep.txt и выводит его на output.txt.

Я хочу сделать что-то подобное для sed, т.е. хочу сохранить команды sed в отдельном файле (скажем, sed.txt) и захочу применить их во входном файле (например, input.txt) и создать выходной файл (скажем, output.txt).

Я пробовал следующее:

/usr/xpg4/bin/sed -f sed.txt input.txt > output.txt

Это не работает, и я получаю следующую ошибку:

sed: command garbled

Содержимое указанных выше файлов приведено ниже:

sed.txt

sed s/234/acn/ input.txt
sed s/78gt/hit/ input.txt

input.txt

234GH
5234BTW
89er
678tfg
234
234YT
tfg456
wert
78gt
gh23444

Пожалуйста, совет.

Ответы

Ответ 1

Ваш sed.txt должен содержать только команды sed: без префикса с sed или суффиксация с входным файлом. В вашем случае это должно быть:

# sed.txt
s/234/acn/
s/78gt/hit/

При запуске на вашем входе:

$ /usr/xpg4/bin/sed -f sed.txt input.txt
acnGH
5acnBTW
89er
678tfg
acn
acnYT
tfg456
wert
hit
ghacn44

Ответ 2

Вместо того, чтобы сохранять команды sed в отдельном текстовом файле, вы можете попробовать создать sed script. Файл ниже может запускаться непосредственно в ваших файлах данных:

./myscript.sed inputfile.txt > outputfile.txt

#!/bin/sed -f
s/234/acn/
s/78gt/hit/