2012-10-24 199 views
-1

我搜索並發現「echo -n」和「printf」是解決方案,但它們在我的機器上工作有點古怪。將字符串添加到沒有換行符的文件中

這裏:

[[email protected] ~]$ echo "hello" >> test 
[[email protected] ~]$ cat test 
hello 
[[email protected] ~]$ echo -n "world" >> test 
[[email protected] ~]$ cat test 
hello 
world 
[[email protected] ~]$ echo -n " seriously?" >> test 
[[email protected] ~]$ cat test 
hello 
world seriously? 

同樣是 「printf」 上的情況。它第二次第三次工作等等,但不是第一次。

我對awk和sed不太舒服,這就是爲什麼我想要使用這些。

如果我沒有任何選擇可以告訴我如何通過awk或sed在/etc/grub.conf中添加「elevator = noop」?

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

+0

感謝編輯約翰。我在那裏編輯,但你很快。 – Stunn3r

+0

在一個內部詢問兩個*不同的問題並不是一個好主意。 – GreyCat

+0

:) ..我拿起東西,檢查約翰的答案的前2行。 P.s.這不是兩個問題,那只是試圖告訴所有的「灰貓」,我在發佈之前做了一個研究並描述了我的問題。有時會描述幫助。 – Stunn3r

回答

1

-n選項控制換行是否在回波的加入。那第一個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 
+0

嗯..哇..從來沒有想過的..非常感謝: ) – Stunn3r

+0

我想我將不得不使用sed或awk – Stunn3r

+0

有沒有什麼東西可以檢查該行是否在最後有\ n? – Stunn3r

0

通常情況下,你的shell會有一個內置的回聲。這會造成相當多的混淆。如果你看到奇怪的行爲,你應該嘗試一個回聲的絕對路徑,它可以解決問題。

[[email protected] ]$ which echo 
/usr/bin/echo 
[[email protected] ]$ echo --version 
--version 
[[email protected]]$ /usr/bin/echo --version 
echo (GNU coreutils) 8.15 
... 

事實證明我的回聲,在x64的Linux 8.15和bash 4.2.37似乎 「做正確的事」:

[[email protected] ]$ echo -n "Hi" > /tmp/hi 
[[email protected] ]$ cat /tmp/hi 
Hi[[email protected] ]$ 
+0

該文件已經在結束A/N。所以對於第一個「回聲-n」,它不會工作 – Stunn3r

0

用printf而不是回聲。 回聲是不便攜式和使用尷尬

+0

文件已經有A/N結尾。所以printf或回聲不會工作的第一次,但工作後第一次。檢查約翰的答案,這很清楚 – Stunn3r