Вы не хотите использовать переменную для подстановки (потому что она может содержать символы новой строки, например). Я предполагаю, что это GNU sed, это linux. В этом случае см, может ли GNU СЕПГ команда r
поможет вам:
`r FILENAME'
As a GNU extension, this command accepts two addresses.
Queue the contents of FILENAME to be read and inserted into the
output stream at the end of the current cycle, or when the next
input line is read. Note that if FILENAME cannot be read, it is
treated as if it were an empty file, without any error indication.
As a GNU `sed' extension, the special value `/dev/stdin' is
supported for the file name, which reads the contents of the
standard input.
Если pppp
находится на линии своей собственной, вы могли бы пойти с чем-то вроде
/pppp/{
r file.txt
d
}
или, в качестве альтернативы, команда s
с модификатором e
:
`e'
This command allows one to pipe input from a shell command into
pattern space. If a substitution was made, the command that is
found in pattern space is executed and pattern space is replaced
with its output. A trailing newline is suppressed; results are
undefined if the command to be executed contains a NUL character.
This is a GNU `sed' extension.
Это будет выглядеть примерно так
s/pppp/cat file.txt/e
и это то, что вам нужно, если pppp
в середине строки. Кроме того, если вам нужна дальнейшая обработка на file.txt
, вы можете заменить cat
на все, что вам нужно (хотя вам нужно быть осторожным при цитировании /
и \
).
Окончательный вариант - рассмотреть Perl, который примет нечто очень похожее на ваши команды оболочки.
'm4 (1)' ваш друг. – lcd047
Выполняет ли pppp только один раз на отдельной строке? В этом случае мы можем искать другое решение, разделяющее lgtxt на pppp-линию. Или pppp происходит на некоторых строках 'if [" $ {line} "=" pppp "]; затем ... ' –
Это не происходит в предложении и не только один раз. –