Добавить слова в текстовый файл с помощью одной команды терминала (без редакторов)

15

Я новичок в Linux. Мне нужно отредактировать файл .conf только от открытого терминала и не использовать текстовые редакторы. То есть, могу ли я добавить слова и предложения в файл конфигурации из открытого терминала?

Пример: command /home/.../file.conf -add 'abcd' к 23-й строке и т. д. И, наконец, сохраните его.

Можно ли выполнить поиск определенного слова в этом файле конфигурации и добавить новый текст в следующую строку этого файла конфигурации, используя только команду?     

задан user259060 17.03.2014 в 07:31
источник

5 ответов

25

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

echo "Hello you!" >> myfile.txt
echo "this is 2nd line text" >> file.txt
echo "last line!" >> file.txt

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

    
ответ дан Faron 17.03.2014 в 08:04
16

Добавление слов и предложений в файл конфигурации из открытого терминала может быть легко достигнуто с помощью sed.

sed -i '23iabcd' file.conf

вставляет в строке 23 текст abcd в файл file.conf

-i делает модификацию непосредственно в файле file.conf .

Если вы хотите использовать awk , то:

awk -v n=23 -v s="abcd" 'NR == n {print s} {print}' file > file.conf

Следующее добавляет одну строку после SearchPattern.

sed -i '/SearchPattern/aNew Text' SomeFile.txt

Вставляет новый текст по одной строке под каждой строкой, содержащей SearchPattern.

Чтобы добавить две строки, вы можете использовать \ и ввести новую строку при вводе нового текста.

 sed -i '/pattern/a \
line1 \
line2' inputfile
    
ответ дан Stormvirux 17.03.2014 в 08:07
3

Вы также можете использовать команду printf .

Чтобы добавить строки в ваш файл

$ printf "\nThis is a new line to your document" >> file.txt

Чтобы перезаписать файл

$ printf "This overwrites your file" > file.txt
    
ответ дан rafaelbattesti 20.02.2015 в 15:56
0
awk '{if ( ~ /regex/) print  "content to be added"; else print }' < inputfile > outputfile

Примечания:

  • regex является регулярным выражением (также называемым регулярным выражением), он определяет критерии поиска. Регулярные выражения допускают очень настраиваемые поисковые запросы, а синтаксис, понятный awk, - в руководстве . В простейшем случае - поиск строки «как есть», символ по символу - просто поместите обратную косую черту перед специальными символами (см. Руководство для списка специальных символов)

Как это работает:

  • откройте inputfile для чтения входных строк, очистите outputfile и откройте его для записи выходных строк
  • для каждой строки, запустите блок в фигурных скобках:
    • , если строка соответствует регулярному выражению, затем выводит строку с добавленным содержимым
    • в противном случае вывести ту же строку.
ответ дан ignis 17.03.2014 в 08:00
0

Я нашел решение своего вопроса, используя команду ed

ed -s /home/.../abc.conf <<< $'23i\ntext\n.\nwq'

Текст может содержать 27 строк. Вы можете скопировать 27 строк из текстового файла и вставить 27 строк в файл конфигурации. Но мне нужно запустить команду ed , чтобы добавить больше текста в тот же файл конфигурации.     

ответ дан user259060 18.03.2014 в 13:16