作为一名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 <<