sed读取单行而不换行



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

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

在我应用sed s.之前,我试图在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=$'abcn'
$ printf '>> %q <<n' "$s" "${s%%$'n'}"
>> $'abcn' <<
>> abc <<

最新更新