gpt4 book ai didi

linux - Bash sed 用文件内容替换文本

转载 作者:太空狗 更新时间:2023-10-29 11:27:10 32 4
gpt4 key购买 nike

我想用 file.txt 内容替换字符串。

mtn="John"
fs=`cat file.txt`
lgtxt=`cat large_text.txt`

stxt1=`echo $lgtxt | sed "s/zzzz/$mtn/g"`
stxt2=`echo $stxt1 | sed "s/pppp/$fs/g"`

它将“zzzz”替换为“mnt”的值,但不会替换“pppp”。文件 file.txt 包含名称列表,例如:汤姆琼斯泰德·贝克琳达埃文斯在单独的行中。我想将它们放在单独的行中的 large_text.txt 文件中,就像它们在原始文件中一样,并用逗号分隔。

最佳答案

您不想使用变量进行替换(例如,因为它很可能包含换行符)。我假设它是 GNU sed,因为它是 .在这种情况下,查看 GNU sed 的 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
}

或者,或者,带有 e 修饰符的 s 命令:

`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,它将接受与您的 shell 命令非常相似的内容。

关于linux - Bash sed 用文件内容替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056599/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com