【问题标题】:bash script append text to first line of a filebash 脚本将文本附加到文件的第一行
【发布时间】:2014-11-16 15:01:31
【问题描述】:

我想使用 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 脚本的了解不足以在这里找到解决方案,以及所有我在网上找到的示例添加文件中每一行的开头/结尾,而不仅仅是第一行。

【问题讨论】:

  • grep "$line" "$file" 改用这个@RyuKajiya 我刚刚尝试过它在我的终端上运行良好。
  • 谢谢!现在就像一个魅力。

标签: linux bash raspbian


【解决方案1】:

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

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

还有

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

要将结果附加到同一文件,您必须使用-i 开关:

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

【讨论】:

  • sed '1 s/$/ 123/' 怎么样? =)
  • 是的,这也可以,谢谢@sputnick 我也在添加这个。
  • sed ' 1 s/.*/&bcm2708.w1_gpio_pin=20/' "$file" > "$file" 刚刚清除了整个文件...
  • 再次检查@RyuKajiya,根据您的要求更新命令。
  • 谢谢,首先写入一个临时文件,然后移动到想要的文件工作!现在我只是有一个问题,检查文件是否已经包含文本不起作用。它总是添加文本,即使它已经在那里
【解决方案2】:

这是在/etc/passwd 的第一行添加“ok”的解决方案,我认为您可以在脚本中使用它并稍作“调整”:

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

【讨论】:

  • 所以我会做 printf awk 'NR==1{printf "%s %s\n", $0, "bcm2708.w1_gpio_pin=20"}' /boot/cmdline.txt >> " $文件”?
  • 你真的需要sudo吗?我怀疑 不! 其余的,看起来都很好!
  • 不起作用,我将 printf 行编辑为上述注释中的行,但文件没有被修改
  • awk不要修改文件in-place,需要使用临时文件或者使用sed -i ...
  • 这会更新第一行,但会删除所有其他行。
【解决方案3】:

编辑一个文件,你可以使用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:退出

【讨论】:

    【解决方案4】:

    这可用于将变量附加到输入的第一行:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      相关资源
      最近更新 更多