Как скопировать содержимое текстового файла и вставить его в другой, начиная с определенной строки?

Убедитесь, что соответствующий драйвер карты wlan по-прежнему установлен. Поместите «sudo lspci» и опубликуйте вывод

10
задан 28 August 2017 в 00:31

9 ответов

head и tail solution

Предположим, что исходный файл называется ~/a, а файл для вставки называется ~/b. Мы поместим объединенный файл в ~/c:

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
Путь ~/ является короткой рукой для вашего имени заголовка /home/user, который копирует первые пять строк файла a в новый созданный файл c cat перечисляет содержимое файла b и добавляет его в файл c tail добавляет файл a, начиная с строки 6 до конца файла c

После проверки переименования объединенный файл

После проверки того, что файл c слит правильно из файлов a и b, мы переименуем c в a, используя:

mv ~/c ~/a
[d9 ] Путь ~/ является короткой рукой для вашего имени /home/user каталога
7
ответ дан 22 May 2018 в 19:00
  • 1
    Спасибо за ваш ответ. Все прошло отлично. Однако есть ли другой способ сделать это без использования третьего текстового файла? – G. Paschalis 28 August 2017 в 00:58
  • 2
    После этого третий файл можно переименовать в исходный файл. Я подумал, что лучше всего сначала просмотреть файл. Я добавлю дополнительные шаги к ответу сейчас. – WinEunuuchs2Unix 28 August 2017 в 01:04
  • 3
    Или ... (head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt – JJoao 5 September 2017 в 19:26
  • 4
    @JJoao Это приятное однострочное резюме :) В целях обучения я предпочитаю использовать одну строку для каждого командного метода и вложенные операторы if. Однако для копирования и вставки в терминал мне нравится один лайнер! – WinEunuuchs2Unix 5 September 2017 в 20:27

head и tail solution

Предположим, что исходный файл называется ~/a, а файл для вставки называется ~/b. Мы поместим объединенный файл в ~/c:

head -n 5 ~/a > ~/c cat ~/b >> ~/c tail --lines=+6 ~/a >> ~/c Путь ~/ является короткой рукой для вашего имени заголовка /home/user, который копирует первые пять строк файла a в новый созданный файл c cat перечисляет содержимое файла b и добавляет его в файл c tail добавляет файл a, начиная с строки 6 до конца файла c

После проверки переименования объединенный файл

После проверки того, что файл c слит правильно из файлов a и b, мы переименуем c в a, используя:

mv ~/c ~/a Путь ~/ является короткой рукой для вашего имени /home/user каталога
7
ответ дан 18 July 2018 в 07:49

head и tail solution

Предположим, что исходный файл называется ~/a, а файл для вставки называется ~/b. Мы поместим объединенный файл в ~/c:

head -n 5 ~/a > ~/c cat ~/b >> ~/c tail --lines=+6 ~/a >> ~/c Путь ~/ является короткой рукой для вашего имени заголовка /home/user, который копирует первые пять строк файла a в новый созданный файл c cat перечисляет содержимое файла b и добавляет его в файл c tail добавляет файл a, начиная с строки 6 до конца файла c

После проверки переименования объединенный файл

После проверки того, что файл c слит правильно из файлов a и b, мы переименуем c в a, используя:

mv ~/c ~/a Путь ~/ является короткой рукой для вашего имени /home/user каталога
7
ответ дан 24 July 2018 в 18:53

Самый простой инструмент здесь может быть sed. Чтобы вставить b.txt в a.txt после 5-й строки, вы можете написать:

sed '5r b.txt' a.txt

sed читает файл, указанный как аргумент (a.txt) по строкам. Все строки воспроизводятся на выходе так же, как они появились на входе, если только они не будут изменены командой.

5 - это адрес (номер строки), в котором должна выполняться следующая команда. Мы используем команду r, которая принимает имя файла в качестве аргумента (здесь b.txt), читает его полностью и вставляет его в выходной файл после текущей строки.

Как показано выше, это Командная строка sed выводит вывод только на терминал, не записывая ни одного файла. Вы можете перенаправить его на новый файл (ни один из входных файлов!) С использованием перенаправления вывода Bash:

sed '5r b.txt' a.txt > c.txt

Или вы можете напрямую изменить внешний файл ввода a.txt с помощью sed s -i (для «на месте»). Если вы напишете его как -i.bak, сначала сделайте резервную копию исходного входного файла с суффиксом .bak:

sed -i '5r b.txt' a.txt

Пример:

$ cat a.txt 
January
February
March
April
May
October
November
December

$ cat b.txt 
June
July
August
September

$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December
16
ответ дан 22 May 2018 в 19:00

(Повторное использование элегантного примера из @ByteCommander:)

awk '1; NR==5 {system("cat b.txt")}' a.txt
0
ответ дан 22 May 2018 в 19:00

Самый простой инструмент здесь может быть sed. Чтобы вставить b.txt в a.txt после 5-й строки, вы можете написать:

sed '5r b.txt' a.txt

sed читает файл, указанный как аргумент (a.txt) по строкам. Все строки воспроизводятся на выходе так же, как они появились на входе, если только они не будут изменены командой.

5 - это адрес (номер строки), в котором должна выполняться следующая команда. Мы используем команду r, которая принимает имя файла в качестве аргумента (здесь b.txt), читает его полностью и вставляет его в выходной файл после текущей строки.

Как показано выше, это Командная строка sed выводит вывод только на терминал, не записывая ни одного файла. Вы можете перенаправить его на новый файл (ни один из входных файлов!) С использованием перенаправления вывода Bash:

sed '5r b.txt' a.txt > c.txt

Или вы можете напрямую изменить внешний файл ввода a.txt с помощью sed s -i (для «на месте»). Если вы напишете его как -i.bak, сначала сделайте резервную копию исходного входного файла с суффиксом .bak:

sed -i '5r b.txt' a.txt

Пример:

$ cat a.txt January February March April May October November December $ cat b.txt June July August September $ sed '5r b.txt' a.txt January February March April May June July August September October November December
16
ответ дан 18 July 2018 в 07:49

(Повторное использование элегантного примера из @ByteCommander:)

awk '1; NR==5 {system("cat b.txt")}' a.txt
0
ответ дан 18 July 2018 в 07:49

Самый простой инструмент здесь может быть sed. Чтобы вставить b.txt в a.txt после 5-й строки, вы можете написать:

sed '5r b.txt' a.txt

sed читает файл, указанный как аргумент (a.txt) по строкам. Все строки воспроизводятся на выходе так же, как они появились на входе, если только они не будут изменены командой.

5 - это адрес (номер строки), в котором должна выполняться следующая команда. Мы используем команду r, которая принимает имя файла в качестве аргумента (здесь b.txt), читает его полностью и вставляет его в выходной файл после текущей строки.

Как показано выше, это Командная строка sed выводит вывод только на терминал, не записывая ни одного файла. Вы можете перенаправить его на новый файл (ни один из входных файлов!) С использованием перенаправления вывода Bash:

sed '5r b.txt' a.txt > c.txt

Или вы можете напрямую изменить внешний файл ввода a.txt с помощью sed s -i (для «на месте»). Если вы напишете его как -i.bak, сначала сделайте резервную копию исходного входного файла с суффиксом .bak:

sed -i '5r b.txt' a.txt

Пример:

$ cat a.txt January February March April May October November December $ cat b.txt June July August September $ sed '5r b.txt' a.txt January February March April May June July August September October November December
16
ответ дан 24 July 2018 в 18:53

(Повторное использование элегантного примера из @ByteCommander:)

awk '1; NR==5 {system("cat b.txt")}' a.txt
0
ответ дан 24 July 2018 в 18:53

Другие вопросы по тегам:

Похожие вопросы: