sed 读取没有换行的单行

sed read single line without linefeed

作为新手 linux 用户,我尝试使用 sed 来替换一些文本字符串。新字符串是另一个文件的一行内容。它基本上按预期工作,除了在替换文本之后插入换行符(我不想要 :-)

newString=`sed -n "$(($line+1))"p otherFile `
sed "s@oldString@$newString@" < oldFile > newFile

在我应用 sed 之前,我尝试删除 newString 中的潜在 LF(使用我在网上找到的不同方法,其中包括流行的 sed ':a;N;$!ba;s/\n/ /g' ),但没有成功。

目前只显示如下:

Some text to be replaced

转向例如进入

Some text is
replaced

而我只想得到单行结果。我想问题出在通过 sed -n p 将 newString 作为整行读取。如果我手动定义一个 newString,则替代品会按需要工作以仅生成一行。

sed 将始终以换行符终止其输出(尽管进程替换通常会删除最后一个换行符,所以我不确定您为什么会看到这个问题)。

您可以在之后修改您的变量(假设您的 shell 是 Bash):

newString="${newString%%$'\n'}"

示范:

$ s=$'abc\n'
$ printf '>> %q <<\n' "$s" "${s%%$'\n'}"
>> $'abc\n' <<
>> abc <<