簡體   English   中英

bash 腳本將文本附加到文件的第一行

[英]bash script append text to first line of a file

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

到目前為止我得到的是:

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 腳本的了解不足以在這里找到解決方案,以及所有我在網上找到的示例添加文件中每一行的開頭/結尾,而不僅僅是第一行。

sed命令會將123添加到文件第一行的末尾。

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

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

要將結果附加到同一文件,您必須使用-i開關:

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

這是在/etc/passwd的第一行添加“ok”的解決方案,我認為您可以在腳本中使用一點“調整”:

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

編輯文件,您可以使用標准編輯器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 : append (這將在當前行之后插入)
  • 我們處於插入模式,我們正在插入$line的擴展
  • . : 停止插入模式
  • 1,2j連接第 1 行和第 2 行
  • w : 寫
  • q : 退出

這可用於將變量附加到輸入的第一行:

awk -v suffix="$suffix" '{print NR==1 ? $0 suffix : $0}'

即使變量可能包含正則表達式格式字符,這也將起作用。

例子:

suffix=' [first line]'
cat input.txt | awk -v suffix="$suffix" '{print NR==1 ? $0 suffix : $0}' > output.txt

輸入.txt:

Line 1
Line 2
Line 3

輸出.txt:

Line 1 [first line]
Line 2
Line 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM