Команда для добавления строки в текстовый файл без открытия редактора

Предположим, у меня есть строка, которую я хочу добавить в файл, не открывая редактор.

Как я мог бы добавить эту строку

alias list='ls -cl --group-directories-first'

к этому файлу

config.fish

Вы можете добавить линия текста в файл с помощью >> оператор:

echo "hello world" >> my_file.txt

или в вашем случае

echo "alias list='ls -cl --group-directories-first'" >> config.fish

Пожалуйста, примите к сведению различные типы котировок.

Существует множество способов добавления к файлу без открытия текстовых редакторов, в частности, с помощью нескольких доступных утилит обработки текста в Ubuntu. В общем, все, что позволяет нам выполнять open() системный вызов с O_APPEND добавлен флаг, который можно использовать для добавления в файл.

  • Версия GNU для dd утилита может добавлять данные в файл с помощью conv=notrunc oflag=append

    printf "\nalias list='ls -cl --group-directories-first'\n" | dd conv=notrunc oflag=append bs=1 of=config.fish

    Переносимо мы могли бы использовать что-то подобное на правой стороне конвейера:

    dd conv=notrunc seek=$(wc -c < testFile.txt) bs=1 of=testFile.txt

    Обратите внимание на использование bs=1 , который заключается в том , чтобы предотвращение коротких считываний из конвейера

  • То tee команда может быть использована, когда вам нужно добавить к файлу и отправить его в stdout или в следующую команду в конвейере

    tee -a config.fish <<< "alias list='ls -cl --group-directories-first'"
  • awk имеет оператор добавления >> который также является портативным и определяется спецификациями POSIX

    awk 'BEGIN{ printf "alias list=\x27ls -cl --group-directories-first\x27\n" >> "config.fish"  }'
  • Мы можем объединить sedфлаг страны $ чтобы сопоставить последнюю строку с a для добавления и -i для редактирования на месте.

    sed -i '$a alias list='"'"'ls -cl --group-directories-first'"'" config.fish
  • Мы могли бы даже реализовать что-то вроде dd в Python 3:

    #!/usr/bin/env python3    # read bytes from stdin, append to specified file    import sys    with open(sys.argv[1],'ab') as f:         f.write(sys.stdin.buffer.read())

Смотрите также:

Добавление к Ответ Стефано, вы также можете использовать cat:

  • Использование heredoc:

    $ cat >> config.fish <<'EOF'> alias list='ls -cl --group-directories-first'> EOF

    <<'EOF' означает "принимайте следующее в качестве входных данных, пока не дойдете до строки, которая просто EOF". Кавычки означают буквальное восприятие входных данных.

  • Или ввод строки в stdin:

    $ cat >> config.fish

    Затем вставьте или введите строку, нажмите Enter чтобы перейти к новой строке, затем нажмите Ctrl+D, чтобы отметить конец.