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

22

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

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

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

user259060
источник
1
Похоже, sedможет прийти на помощь.
Нитищ
1
Задайте один вопрос.
Авинаш Радж

Ответы:

39

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

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

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

Faron
источник
Спасибо за быстрый ответ. Но мне нужно последовательно добавить более 3000 слов в 23-ю строку моего файла .conf. Есть ли более простой способ?
user259060
20

Добавление слов и предложений в конфигурационный файл с открытого терминала может быть легко достигнуто с помощью 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.

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

 sed -i '/pattern/a \
line1 \
line2' inputfile
Stormvirux
источник
5

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

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

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

Перезаписать файл

$ printf "This overwrites your file" > file.txt
rafaelbattesti
источник
0
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

Примечания:

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

Как это устроено:

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

Я нашел решение своего вопроса с помощью edкоманды

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

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

user259060
источник