我想使用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脚本的了解不足以在这里找到解决方案,并且所有我在网上找到的例子在文件中添加每行的开头/结尾,而不仅仅是第一行。
答案 0 :(得分:14)
此sed
命令会将123
添加到文件第一行的末尾。
sed ' 1 s/.*/&123/' yourfile.txt
也
sed '1 s/$/ 123/' yourfile.txt
要将结果附加到同一文件,您必须使用-i
开关:
sed -i ' 1 s/.*/&123/' yourfile.txt
答案 1 :(得分:2)
这是一个在/etc/passwd
的第一行添加“ok”的解决方案,我想你可以在脚本中使用它来进行一些“调整”:
$ awk 'NR==1{printf "%s %s\n", $0, "ok"}' /etc/passwd
root:x:0:0:root:/root:/bin/bash ok
答案 2 :(得分: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
:退出答案 3 :(得分:0)
这可用于将变量附加到输入的第一行:
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
input.txt:
Line 1
Line 2
Line 3
output.txt:
Line 1 [first line]
Line 2
Line 3