2014-11-16 143 views
4

我想使用bash腳本將文本添加到文件第一行的末尾。 該文件是/etc/cmdline.txt,它不允許換行符,並且需要由空白分隔的新命令,所以我想要添加realy的文本需要放在第一行。bash腳本將文本追加到文件的第一行

我走到這一步是:

line=' bcm2708.w1_gpio_pin=20' 
file=/boot/cmdline.txt 
if ! grep -q -x -F -e "$line" <"$file"; then 
    printf '%s' "$line\n" >>"$file" 
fi 

但是,追加第一線的線突破後的文本,所以結果是錯誤的。 我或者需要修剪文件競爭,添加我的文本和換行符,或者以某種方式將它添加到文件的第一行,而不是以某種方式觸及其餘的文件,但是我對bash腳本的瞭解還不足以在此處找到解決方案,並且我在網上找到的所有例子都會在文件中添加每行的開始/結尾,而不僅僅是第一行。

+1

'grep的 「$行​​」 「$文件」'用這個代替@RyuKajiya我剛纔試了一下我的終端上正常工作。 – Skynet

+1

謝謝!現在就像魅力一樣。 –

回答

10

sed命令將增加123到您的文件的第一行結束。

sed ' 1 s/.*/&123/' yourfile.txt 

sed '1 s/$/ 123/' yourfile.txt 

對於追加結果,你必須使用-i開關相同的文件:

sed -i ' 1 s/.*/&123/' yourfile.txt 
+3

'sed'1 s/$/123 /''怎麼辦? =) –

+0

是的,這也會工作,謝謝@sputnick我也加了。 – Skynet

+0

sed'1 s /.*/& bcm2708.w1_gpio_pin = 20 /'「$ file」>「$ file」剛剛清除整個文件... –

2

這是一個解決方案,以增加「OK」在第一行上/etc/passwd,我覺得你可以在你的腳本中使用此與「微調」的一點點:

$ awk 'NR==1{printf "%s %s\n", $0, "ok"}' /etc/passwd 
root:x:0:0:root:/root:/bin/bash ok 
+0

所以我會做printf awk'NR == 1 {printf「%s%s \ n」,$ 0,「bcm2708.w1_gpio_pin = 20」}'/boot/cmdline.txt >>「$ file」? –

+0

你真的需要'sudo'嗎?我懷疑**沒有!**其餘的,似乎很好! –

+0

不起作用,我編輯了printf行到上面評論中的那一行,但是文件沒有被修改 –

0

編輯一個文件,你可以使用ed,標準編輯:

line=' bcm2708.w1_gpio_pin=20' 
file=/boot/cmdline.txt 
if ! grep -q -x -F -e "$line" <"$file"; then 
    ed -s "$file" < <(printf '%s\n' 1 a "$line" . 1,2j w q) 
fi 

ed的命令:

  • 1:去行1
  • a:追加(這將在當前行之後插入)
  • 我們在插入模式和我們插入膨脹$line
  • .:停止插入模式
  • 1,2j加入線路1和2
  • w:寫
  • q:退出