在没有换行符的情况下向文件中添加字符串

时间:2012-10-24 19:22:13

标签: string shell unix

我搜索并发现“echo -n”和“printf”是解决方案,但它们在我的机器上工作有点古怪。

这里:

[wadhwaso@nxnixd01 ~]$ echo "hello" >> test
[wadhwaso@nxnixd01 ~]$ cat test
hello
[wadhwaso@nxnixd01 ~]$ echo -n "world" >> test
[wadhwaso@nxnixd01 ~]$ cat test
hello
world
[wadhwaso@nxnixd01 ~]$ echo -n " seriously?" >> test
[wadhwaso@nxnixd01 ~]$ cat test
hello
world seriously?

“printf”的情况也是如此。它第四次工作第4次,依此类推,但不是第一次。

我对awk和sed不太满意,这就是为什么我要使用它们。

如果我没有任何选择,有人可以告诉我如何通过awk或sed在/etc/grub.conf中添加“elevator = noop”吗?

答案: sed -i '$s/$/,string/' file ..

3 个答案:

答案 0 :(得分:1)

-n选项控制是否在回显的 end 处添加换行符。第一个echo "hello"hello\n写入文件;这就是新行的来源。

要添加内核选项,请尝试以下方法之一。他们每个人都在grub.conf中搜索kernel行,并在最后添加“elevator = noop”。

sed '/kernel/ s/$/ elevator=noop/' /etc/grub.conf

awk '$1 == "kernel" { $0 = $0 " elevator=noop" } { print } ' /etc/grub.conf

答案 1 :(得分:0)

您的shell通常会有内置回声。这可能会导致相当多的混乱。如果你看到奇怪的行为,你应该尝试一个回声的绝对路径,它可以解决问题。

[user@host ]$ which echo
/usr/bin/echo
[user@host ]$ echo --version
--version
[user@host]$ /usr/bin/echo --version
echo (GNU coreutils) 8.15
...

事实证明我的回声,x5 linux上的8.15和bash 4.2.37似乎“做正确的事”:

[user@host ]$ echo -n "Hi" > /tmp/hi
[user@host ]$ cat /tmp/hi
Hi[user@host ]$

答案 2 :(得分:0)

使用printf而不是echo。 echo不可移植,难以使用