скрипт bash добавляет текст в первую строку файла



Я хочу добавить текст в конец первой строки файла с помощью скрипта 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' "$linen" >>"$file"
fi


Но это добавляет текст после разрыва строки первой строки, поэтому результат неверен.
Мне нужно либо обрезать файл contend, добавить мой текст и ленту строк, либо каким-то образом просто добавить его в первую строку но мои знания скриптов bash недостаточно хороши, чтобы найти решение здесь, и все примеры, которые я нахожу в интернете, добавляют начало/конец каждой строки в файле, а не только первую строку.

719   3  

3 ответов:

Эта команда sed добавит 123 в конец первой строки вашего файла.

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

Также

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

Для добавления результата в тот же файл необходимо использовать переключатель -i:

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

Это решение, чтобы добавить "ок" в первой строке на /etc/passwd, я думаю, что вы можете использовать это в своем скрипте с небольшим количеством "настройки":

$ 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'команды s:

  • 1: перейти к строке 1
  • a: добавить (это будет вставлено после текущей строки)
  • мы находимся в режиме вставки и вставляем расширение $line
  • .: остановить режим вставки
  • 1,2j соединить строки 1 и 2
  • w: написать
  • q: бросить

Comments

    Ничего не найдено.