Каков самый простой способ добавить строку в начале каждой строки файла из командной строки?

Я ищу способ добавить строку в начало каждой строки (той же строки для каждой строки). Не что-то настраиваемое, а нечто, что будет легко запомнить и доступно на каждой POSIX-совместимой платформе (и каждой оболочке).

  • grep seach pattern из файла, содержащего список шаблонов, запись результата каждого шаблона в indivdual файлы
  • Как объединить информацию каждой пары строк в одну строку?
  • Добавить первый столбец в файл
  • Сравните два файла и верните значение true или false
  • Как я могу поместить эту строчную манипуляцию в цикле, чтобы она продолжалась, пока нечего делать?
  • Как отображать зависимости, заданные в make-файле как дерево?
  • Найдите шаблон и вставьте # в начале 2 строки до этого и 1 строку после этого
  • Получать значения по блоку в одном файле
  • 7 Solutions collect form web for “Каков самый простой способ добавить строку в начале каждой строки файла из командной строки?”

    Вы можете использовать sed :

     sed -i 's/^/your_string /' your_file 

    Благодаря комментариям Стефана и Марко, обратите внимание, что опция -i не является POSIX. Способ POSIX, описанный выше, будет

     sed 's/^/your_string /' your_file > tmp_copy && mv tmp_copy your_file 

    или perl :

     perl -pi -e 's/^/your_string /' your_file 

    объяснение

    Обе команды выполняют подстановку регулярных выражений, заменяя начало строки ( ^ ) на нужную строку. Переключатель -i в обеих командах гарантирует, что файл редактируется на месте (т. Е. Изменения отражаются в файле вместо того, чтобы печатать на stdout).

    sed должен быть доступен на любой ОС, совместимой с POSIX, и perl должен быть доступен в большинстве современных Unices, за исключением, возможно, тех, которые прошли через усилия по его удалению.

     :|paste -d'foo ' - - - - input > output 

    (просто шутите, хотя вы, вероятно, найдете, что это самый быстрый из всех решений, размещенных здесь: -b).

    Канонический путь:

     sed 's/^/foo /' < input > output 

    Однако его легко адаптировать к произвольным строкам. Например,

     sed "s/^/$var /" 

    Работает только в том случае, если $var не содержит символов & , \ , / nor newline.

    В этой связи,

     export var awk '{print ENVIRON["var"], $0}' 

    или

     perl -pe '$_="$ENV{var} $_"' 

    будет работать лучше.

    Я представляю решение с использованием awk добавляя строку «foo».

     awk '{ print "foo", $0; }' input > output 

    awk является кросс-платформенным и доступен в любой системе POSIX. Это не делает редактирование на месте. Если вы хотите отредактировать файл без создания второго, вам придется использовать временный файл. См. Ответ Джозефа, он показывает синтаксис. Другой взлом – использовать следующий синтаксис, который в основном создает временный файл с тем же именем файла, что и исходный файл.

     { rm file; awk '{ print "foo", $0 }' > file; } < file 

    Вы можете избежать проблем редактирования на месте с помощью инструментов потока с помощью инструмента, который обычно делает редактирование на месте – редактор!

     ex sample.txt -c "%s/^/foo /" -c wq 

    Существует дополнительное преимущество в том, что команды легки и очевидны для всех, кто разбирается в одном истинном редакторе.

    Вы можете использовать perl для этого:

     $ perl -pi -e 's/^/mystring /' afile.txt 

    пример

    Создайте образец файла.

     $ seq 5 > afile.txt $ cat afile.txt 1 2 3 4 5 

    Выполните следующую команду:

     $ perl -pi -e 's/^/mystring /' afile.txt $ cat afile.txt mystring 1 mystring 2 mystring 3 mystring 4 mystring 5 

    Просто используя Bash

      while IFS= read -r line; do echo "foo" "${line}" ; done < input > Output 

    Использование Python

     python -c "import sys; print 'foo '.join([ l for l in sys.stdin.readlines() ])" < input > Output 

    Если вы хотите редактировать на месте

     import fileinput import sys for line in fileinput.input(['inputfile'], inplace=True): sys.stdout.write('foo {l}'.format(l=line)) 

    Ссылка ссылки

    Или вы можете сделать следующее:

     vi filename.txt 

    Esc (чтобы убедиться, что вы находитесь в режиме NORMAL ), а затем введите следующую команду:

     :1,$ s/^/mystring 
    Linux и Unix - лучшая ОС в мире.