Додайте слова до текстового файлу за допомогою однієї команди терміналу (редакторів немає)


22

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

Приклад: command /home/.../file.conf -add 'abcd'до 23-го рядка тощо. І нарешті, збережіть це.

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


1
Схоже, sedможуть прийти на допомогу.
nitishch

1
Задайте одне запитання.
Авінаш Радж

Відповіді:


39

Я зазвичай роблю так, коли я програмую свій сценарій, щоб робити те саме, що ви просите, але програмно.

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

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


Спасибі за ваш швидку відповідь. Але мені потрібно додати більше 3000 слів до 23-го рядка мого файлу .conf послідовно. Чи є простіший спосіб?
користувач259060

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 \та ввести новий рядок під час введення нового тексту.

 sed -i '/pattern/a \
line1 \
line2' inputfile

5

Ви також можете використовувати printfкоманду.

Щоб додати рядки до вашого файлу

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

Щоб перезаписати файл

$ printf "This overwrites your file" > file.txt

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команду одночасно, щоб додати більше тексту до того ж конфігураційного файла.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.